关于mybatis实现dao层mapper开发,它可以不用写实现类,它能以代理方式自动生成实现代码。

但是,使用mapper开发,必须遵循以下原则:

一.自己定义的接口名需和mapper映射文件的名保持一致,并且在同一目录下

mapper.xml文件里的namespace属性值和接口必须一致,不然就会报错的

mybatis详解二(Dao层mapper开发)

mybatis详解二(Dao层mapper开发)mybatis详解二(Dao层mapper开发)

二.接口中的方法名必须和mapper.xml中的id保持一致

mybatis详解二(Dao层mapper开发)mybatis详解二(Dao层mapper开发)

三.接口中的方法名必须和mapper.xml配置中的resultType保持一致

mybatis详解二(Dao层mapper开发)mybatis详解二(Dao层mapper开发)

四.参数的类型保持一致

mybatis详解二(Dao层mapper开发)

mybatis详解二(Dao层mapper开发)

用mapper开发dao层就不要关注sqlSession对象的方法调用了增删改查方法,返回一个接口的代理对象,直接调用该对象的方法即可

@Test
public void fun() throws IOException {
    InputStream resourceAsStream = Resources.getResourceAsStream("cn/hd/dao/sqlMapConfig.xml");
    SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
    SqlSession sqlSession = build.openSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User userById = mapper.findUserById(1);
    System.out.println(userById);
}

使用mapper开发,它的参数只有一个(如果有多余的参数,可以将多余的参数封装成pojo类)

mybatis自动识别接口中的方法的返回值,从而调用它们的增删改查方法。

下面上一段完整的实例,使用mapper实现具体的增删改查

首先创建一个bean类并生成get和set方法

public class User {
    private Integer id;
    private String name;
    private String sex;
    private String address;
    private Integer balance;

    public User() {
    }

    public User(Integer id, String name, String sex, String address, Integer balance) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.address = address;
        this.balance = balance;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    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;
    }

    public Integer getBalance() {
        return balance;
    }

    public void setBalance(Integer balance) {
        this.balance = balance;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                ", balance=" + balance +
                '}';
    }
}
然后配置sqlMapConfig.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"></transactionManager>
            <!--连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"></property>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf-8"></property>
                <property name="username" value="root"></property>
                <property name="password" value="1234"></property>
            </dataSource>
        </environment>
    </environments>
   <mappers>
       <mapper resource="cn/hd/mapper/UserMapper.xml"></mapper>
   </mappers>

</configuration>
再创建类配置文件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="cn.hd.mapper.UserMapper">

   <!--查询-->
   <select id="findUserById" parameterType="Integer" resultType="cn.hd.pojo.User" >
   SELECT * FROM mbs WHERE id = #{id}
   </select>
   <!--模糊查询
   #占位符
   $字符串拼接 sql注入(不建议使用)
   也使用占位符1.直接将整个当成参数在代码中传递时手动拼接
   2.sql提供
   $#区别   #里面变量名随意   ${变量名}不能随便写如果是常用类型,必须用value
   -->
   <select id="findByName" parameterType="String" resultType="cn.hd.pojo.User">
      SELECT * FROM  mbs WHERE name LIKE "%"#{name}"%"
   </select>

   <!--添加用户  如果参数是引用类型  占位符的赋值方式为ognl表达式的方式{属性名}-->
   <insert id="UserAdd" parameterType="cn.hd.pojo.User">
      <selectKey order="AFTER" resultType="int" keyProperty="id">
         SELECT LAST_INSERT_ID()
      </selectKey>
      INSERT INTO mbs (id,name,sex,address,balance)VALUES(#{id},#{name},#{sex},#{address},#{balance})
   </insert>

   <!--删除用户-->
   <delete id="UserDelete" parameterType="int">
      DELETE FROM mbs WHERE id=#{id}
   </delete>

   <!--修改用户-->
   <update id="UserUpdate" parameterType="cn.hd.pojo.User">
      UPDATE mbs set name=#{name},sex=#{sex},address=#{address},balance=#{balance} WHERE id=#{id}
   </update>
</mapper>

再创建实现增删改查的接口,不需要实现接口哦

package cn.hd.mapper;

import java.util.List;

public interface UserMapper {

    User findUserById(Integer id);
    List<User> findByName(String name);
    int UserAdd(User user);
    int UserDelete(Integer id);
    int UserUpdate(User user);
}
最后创建测试类
public class DemoMapper {

    @Test
    public void fun() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("cn/hd/mapper/sqlMapConfig.xml");
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = build.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User userById = mapper.findUserById(1);
        System.out.println(userById);
    }

    @Test
    public void fun1() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("cn/hd/mapper/sqlMapConfig.xml");
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = build.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> list = mapper.findByName("莫");
        sqlSession.commit();
        sqlSession.close();
        System.out.println(list);
    }

    @Test
    public void fun2() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("cn/hd/mapper/sqlMapConfig.xml");
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = build.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = new User();
        user.setName("雷锋");
        user.setAddress("河南");
        user.setSex("男");
        user.setBalance(500);
        int row=mapper.UserAdd(user);
        sqlSession.commit();
        sqlSession.close();
        System.out.println(row);
    }

    @Test
    public void fun3() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("cn/hd/mapper/sqlMapConfig.xml");
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = build.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int row = mapper.UserDelete(10);
        sqlSession.commit();
        sqlSession.close();
        System.out.println(row);
    }

    @Test
    public void fun4() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("cn/hd/mapper/sqlMapConfig.xml");
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = build.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = new User();
        user.setId(8);
        user.setName("雷锋");
        user.setAddress("河南");
        user.setSex("男");
        user.setBalance(500);
        int row= mapper.UserUpdate(user);
        sqlSession.commit();
        sqlSession.close();
        System.out.println(row);
    }
}
以上就是使用mapper实现的增删改查的实例了,结果以截图给大家展示

mybatis详解二(Dao层mapper开发)

mybatis详解二(Dao层mapper开发)

mybatis详解二(Dao层mapper开发)

mybatis详解二(Dao层mapper开发)

mybatis详解二(Dao层mapper开发)

数据库展示

mybatis详解二(Dao层mapper开发)

到此mapper开发dao层带刺告一段落

相关文章: