美文网首页我爱编程
MyBatis通过接口代理的方式实现dao

MyBatis通过接口代理的方式实现dao

作者: 嗷老板 | 来源:发表于2018-04-15 21:57 被阅读0次

      在入门案例中,我们使用传统的方法对数据进行增删改查,但在实际的应用中,我们一般会在数据处理层对数据进行增删改查等操作,传统的数据处理层需要有接口、接口的实现类以及测试类,这样有点麻烦,所以我们来使用接口代理的方式实现对数据的处理。

    第一步:创建User类

    package demo01;
    
    import java.util.Date;
    
    public class User {
        private Integer id;
        private String username;
        private Date birthday;
        private String sex;
        private String address;
    
        public User() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public Date getBirthday() {
            return birthday;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        @Override
        public String toString() {
            return "User [id=" + id + ", username=" + username + ", birthday=" + birthday + ", sex=" + sex + ", address="
                    + address + "]";
        }
    
    }
    

    第二步:创建接口

    package demo02;
    
    import demo01.User;
    
    public interface UserMapperInterface {
        //查询数据
        User findUser(Integer id);
        //插入数据
        void addUser(User user);
        //更新数据
        void updateUser(User user);
        //删除数据
        void deleteUser(Integer id);
    }
    

    第三步:创建UserMapperInterface.xml配置文件

    注意:

    • namespace的属性要是接口的全限定名称
    • 接口名称与我们的mapper文件名称一致
    • 接口位置要和我们xml文件位置保持一致
    • 接口中的方法名就是我们mapper文件中的sql语句的id
    <?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="demo02.UserMapperInterface">
        <select id="findUser" parameterType="int" resultType="demo01.User">
            select * from user where id = #{id}
        </select>
        
        <insert id="addUser" parameterType="demo01.User">
            insert into user (username,sex,birthday,address) values (#{username},#{sex},#{birthday},#{address})
        </insert>
        
        <update id="updateUser" parameterType="demo01.User">
            update user set address = #{address} where id = #{id}
        </update>
    
        <delete id="deleteUser" parameterType="int">
            delete from user where id = #{id}
        </delete>
    </mapper>
    

    将mapper文件配置到SqlMapConfig.xml文件中

    配置文件

    第四步:创建测试类

    package demo02;
    
    import static org.junit.Assert.*;
    
    import java.io.IOException;
    import java.util.Date;
    
    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;
    
    import demo01.User;
    
    public class UserMapperInterfaceTest {
        SqlSession sqlSession = null;
        
    //  public UserMapperInterfaceTest(SqlSession sqlSession){
    //      this.sqlSession = sqlSession;
    //  }
    //  
        /**
         * 获得sqlSession
         * @throws IOException
         */
        @Before
        public void getSession() throws IOException{
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            SqlSessionFactory build = builder.build(Resources.getResourceAsStream("SqlMapConfig.xml"));
            sqlSession = build.openSession();
        }
        
        /**
         * 查询数据
         */
        @Test
        public void selectUserById(){
            UserMapperInterface mapper = sqlSession.getMapper(UserMapperInterface.class);
            User user = mapper.findUser(16);
            System.out.println(user.toString());
            sqlSession.close();
        }
        
        /**
         * 插入数据
         */
        @Test
        public void insert() throws Exception {
            User user = new User();
            user.setUsername("赵六");
            user.setSex("男");
            user.setBirthday(new Date());
            user.setAddress("上海");
            UserMapperInterface mapper = sqlSession.getMapper(UserMapperInterface.class);
            mapper.addUser(user);
            sqlSession.commit();
            sqlSession.close();
        }
        
        /**
         * 更新数据
         */
        @Test
        public void update() throws Exception {
            UserMapperInterface mapper = sqlSession.getMapper(UserMapperInterface.class);
            User user = mapper.findUser(29);
            user.setAddress("河南郑州");
            mapper.updateUser(user);
            sqlSession.commit();
            sqlSession.close();
        }
        
        /**
         * 删除数据
         */
        @Test
        public void delete() throws Exception {
            UserMapperInterface mapper = sqlSession.getMapper(UserMapperInterface.class);
            mapper.deleteUser(30);
            sqlSession.commit();
            sqlSession.close();
        }
        
    }
    

    相关文章

      网友评论

        本文标题:MyBatis通过接口代理的方式实现dao

        本文链接:https://www.haomeiwen.com/subject/qhrjkftx.html