MyBatis使用Mapper动态代理

MyBatis使用Mapper动态代理

采用Mapper动态代理方法只需要编写相应的Mapper接口(相当于Dao接口),那么Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同Dao接口实现类方法。
Mapper接口开发需要遵循以下规范:
1、Mapper.xml文件中的namespace与mapper接口的全类名相同。
2、Mapper接口方法名和Mapper.xml中定义的每个statement的id相同。
3、Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同。
4、Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同。

Mybatis框架主要步骤
  1.创建表
  2.创建javabean
  3.创建核心配置文件 mybatis.config.xml
  4.创建映射文件 UserMapper.xml
  5.创建代理接口
  6.java测试类增删改查

需要导入mybatis架包和数据库连接架包

mybatis架包可从该网站下载https://github.com/mybatis/mybatis-3/releases

1.数据库为test  表为user_m

 2.javabean的四个属性

      public class User {

        private int id;
        private String useraName;
        private String userAge;
        private String userAddress;

省略get.set方法和无参构造

}

3.核心配置文件mybatis.config.xml

<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/test" />          数据库名
                <property name="username" value="root" />                                          账号
                <property name="password" value="root" />                                           密码
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="model/UserMapper.xml" />                                              映射文件
    </mappers>
</configuration>

4.映射文件 UserMapper.xml

<?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="dao.IUserIn">
   <resultMap type="model.User" id="uMap">
   <id column="id" property="id"/>                         主键写法  column表列    property类属性
   <result column="userName" property="useraName"/>    其他写法
   <result column="userAge" property="userAge"/>
   <result column="userAddress" property="userAddress"/>
   </resultMap>
    <!-- 通过用户ID查询用户 -->
    <select id="selectUserByID" parameterType="int" resultMap="uMap">
    select * from user_m where id=#{id}    
    </select>
    <select id="insert" parameterType="model.User">
    insert into user_m values(#{id},#{userName},#{userAge},#{userAddress})
    </select>
    <select id="delete" parameterType="model.User">
    delete from user_m where id=#{id}
    </select>
    <select id="update" parameterType="model.User">
    update user_m set userAge=#{userAge} where id=#{id}
    </select>
</mapper>

5.代理接口

public interface IUserIn {

    public User selectUserByID(int id);
    
    public void insert(User user);
    
    public void delete(int i);
    
    public void update(User user);
    
}
6.测试类

public class UserTest {
    SqlSessionFactory factory=null;
    
    @Before
    public void Init() throws IOException{
        //1.指定配置文件路径
        String resource = "mybatis-config.xml";
        //2.加载配置文件
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //3.获取一个session工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        factory = builder.build(inputStream);
    }
    
@Test
public void que(){
    SqlSession session=factory.openSession();
    IUserIn iUserIn=session.getMapper(IUserIn.class);
    User user=iUserIn.selectUserByID(1);
    System.out.println(user.getId()+"   "+user.getUseraName());
    session.close();
}
@Test
public void insert(){
    SqlSession session=factory.openSession();
    IUserIn iUserIn=session.getMapper(IUserIn.class);
    User user=new User(7,"66","88","45");
    iUserIn.insert(user);
    session.commit();
    session.close();
}

}

猜你喜欢

转载自blog.csdn.net/qq_39404258/article/details/81240430