## MyBatis的Dao编写【mapper代理方式实现】
step1: 写一个接口,并写抽象方法
1 package com.sjl.mapper; 2 3 import com.sjl.model.User; 4 5 public interface UserMapper { 6 /* 7 * 保存一个用户 8 * */ 9 public int save(User user);//返回受影响的行数 10 public User findUserById(int id); 11 }
step2: 在同包下建一个UserMapper.xml(具体sql方法的显现类的方法的实现),这个相当于
是dao的实现类,mybatis会为mapper接口生成动态代理实现类;
(说明:入参,返回值,id等要与接口类中的对应,具体看下面的注释)
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 6 <mapper namespace="com.sjl.mapper.UserMapper"> 7 <insert id="save" parameterType="com.sjl.mapper.User"> 8 insert into user(username,sex,birthday,address) 9 value (#{username},#{sex},#{birthday},#{address}); 10 </insert> 11 12 <!--受影响的返回的行数不用写,可以不用写,无意义?--> 13 14 <select id="findUserById" parameterType="int" 15 resultType="com.sjl.mapper.User"> 16 17 </select> 18 19 </mapper>
<!--
com.sjl.mapper.UserMapper 包名+接口名
id="save" 方法名
parameterType="com.sjl.mapper.User" 入参
resultType 返回结果
-->
step3:在src下的sqlconf.xml中的添加如下内容,加载执行dao方法的映射文件;
<mappers> <!--写映射文件的名字--> <mapper resource="com/gyf/mapper/UserMapper.xml"></mapper>
</mappers>
step4:测试类;
1 package com.sjl.test; 2 3 import com.sjl.mapper.UserMapper; 4 import com.sjl.model.User; 5 import org.apache.ibatis.io.Resources; 6 import org.apache.ibatis.session.SqlSession; 7 import org.apache.ibatis.session.SqlSessionFactory; 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 9 import org.junit.After; 10 import org.junit.Before; 11 import org.junit.Test; 12 13 import java.io.IOException; 14 import java.io.InputStream; 15 import java.util.Date; 16 import java.util.List; 17 18 public class Demo02 { 19 SqlSession session; 20 21 @Before 22 public void before() throws IOException{ 23 System.out.println("before...获取session"); 24 //a)读取配置文件; 25 InputStream is=Resources.getResourceAsStream("SqlMapConfig.xml"); 26 //b)通过SqlSessionFactoryBuilder创建SqlSessionFactory会话工厂 。 27 SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(is); 28 // c)通过SqlSessionFactory创建SqlSession。 29 session=sessionFactory.openSession(); 30 } 31 @After 32 public void after(){ 33 34 //关闭SqlSession。 35 session.close(); 36 } 37 38 @Test 39 public void test1() throws IOException{ 40 //通过session拿到这个接口的代理 代理直接转成接口的实现类,并指向UserMapper这个接口 41 UserMapper userMapper=session.getMapper(UserMapper.class); 42 43 //获取数据 44 System.out.println(userMapper.findUserById(1)); 45 46 //保存 47 User user2=new User("xx","x",new Date(),"xx"); 48 userMapper.save(user2); 49 session.commit(); 50 } 51 }