MyBatis動態代理生成DAO的步驟:java
1) 編寫數據管理的接口XxxMappersql
2) 編寫該接口對應的Mapper.xmlapache
a) namespace必須與Mapper接口全名一致session
b) statement的id必須和Mapper接口中的對應方法名一致mybatis
c) statement的resultType必須和Mapper接口中對應方法返回值一致app
3) 經過SqlSession的getMapper(XxxMapper.class)方法來獲取動態代理的Mapper實現類對象測試
開發中運用動態代理的比較多,下面簡單的介紹一個簡單的案例關於增刪改查的測試:ui
1.編寫相應的接口this
public interface UserMapper { /**根據id查詢用戶 * @param id * @return */ public User queryUserById(Long id); /**查詢所有的用戶 * @return */ public List<User> queryAll(); /**增長用戶 * @param user */ public void insertUser(User user); /**更新用戶 * @param user */ public void updateUser(User user); /** * 刪除用戶 * @param id */ public void deleteById(Long id); }
2.編寫主配置文件url
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 加載外部配置文件 --> <properties resource="jdbc.properties"></properties> <settings> <!--開啓駝峯命名法--> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> <!-- 起別名 --> <typeAliases> <typeAlias alias="User" type="cn.mybatis.pojo.User"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <!-- 指定mapper的配置文件 --> <mappers> <mapper resource="mapper.xml"/> <mapper resource="usermapper.xml"/> </mappers> </configuration>
3.編寫映射配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.mapper.UserMapper"> <select id="queryUserById" parameterType="java.lang.Long" resultType="User"> select * from tb_user where id = #{id} </select> <select id="queryAll" resultType="User"> select * from tb_user </select> <insert id="insertUser" parameterType="User"> INSERT INTO tb_user ( id, user_name, password, name, age, sex, birthday, created, updated )VALUES( null, #{userName}, #{password}, #{name}, #{age}, #{sex}, #{birthday}, NOW(), NOW() ); </insert> <delete id="deleteById" parameterType="Long"> DELETE FROM tb_user WHERE id = #{id} </delete> </mapper>
4.編寫測試類
package cn.mybatis.junit.test; import static org.junit.Assert.*; import java.io.InputStream; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Before; import org.junit.Test; public class UserMapperTest { private UserMapper userMapper; InputStream inputStream; SqlSessionFactory sqlSessionFactory; SqlSession sqlSession; @Before public void setUp() throws Exception { String resource = "mybatis-config.xml"; inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); sqlSession = sqlSessionFactory.openSession(); // 經過動態代理獲取 userMapper = sqlSession.getMapper(UserMapper.class); } /** * 根據id查詢 */ @Test public void test() { User user = userMapper.queryUserById(1L); System.out.println(user); } /** * 查詢所有 */ @Test public void test1() { List<User> all = userMapper.queryAll(); for (User user2 : all) { System.out.println(user2); } } /** * 插入用戶 */ @Test public void test2() { User user = new User(); user.setAge(22); user.setBirthday(null); user.setName("jack"); user.setPassword("123"); user.setSex(1); user.setuserName("pick jack"); userMapper.insertUser(user); this.sqlSession.commit(); } /** * 刪除 */ @Test public void test3() { this.userMapper.deleteById(12L); this.sqlSession.commit(); } }