狂神MyBatis笔记

代码实现

数据持久层mapper中只需要接口UserMapper,不需要实现类,而是通过.xml文件的naemespace绑定对应接口。

编写代码

  • 实体类

    public class User {
    private int id;
    private String name;
    private String pwd;

    }
  • Mapper接口

    public interface UserMapper {
    List<User> getUserList();
    }
  • 接口实现类由原来的...Impl转为一个Mapper配置文件...Mapper.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">
    <!-- namespace = 绑定一个对应的Mapper接口 -->
    <!-- 千万不能写错!!!! -->
    <mapper namespace="mapper.UserMapper">
    <!-- 查询语句 -->
    <!-- 里面的id对应上面接口的方法名 -->
    <select id="getUserList" resultType="com.wu.pojo.User">
    select * from user
    </select>
    </mapper>

CRUD

1. namespace

namespace中的包名要和mapper接口的包名一致

2. select、insert、update、delete语句

  • id:对应接口的方法名
  • parameterType:参数类型
  • resultType:Sql语句执行的返回值

例1:实现根据id查询用户

  1. Mapper接口中添加方法

    public interface UserMapper {
    List<User> getUserList();
    User getUserById(int id);
    }
  2. 在UserMapper.xml中添加Select语句

    <mapper namespace="mapper.UserMapper">
    <!-- 查询语句 -->
    <!-- 里面的id对应上面接口的方法名 -->
    <select id="getUserList" resultType="com.wu.pojo.User">
    select * from user
    </select>
    <!--根据id查询用户,用'#'取方法参数-->
    <select id="getUserById" parameterType="int" resultType="com.wu.pojo.User">
    select * from User whele id = #{id}
    </select>
    </mapper>

例2:增加用户

  1. Mapper接口中添加方法

    public interface UserMapper {
    //查询全部用户
    List<User> getUserList();
    //根据id查询用户
    User getUserById(int id);
    //添加用户
    int addUser(User user);
    }
  2. 在UserMapper.xml中添加Select语句

    <mapper namespace="mapper.UserMapper">
    <!-- 查询语句 -->
    <!-- 里面的id对应上面接口的方法名 -->
    <select id="getUserList" resultType="com.wu.pojo.User">
    select * from user
    </select>
    <!--根据id查询用户,用'#'取方法参数-->
    <select id="getUserById" parameterType="int" resultType="com.wu.pojo.User">
    select * from User whele id = #{id}
    </select>
    <!--插入用户,对象中对属性可以直接取出来-->
    <insert id="addUser" parametertype"com.wu.pojo.User">
    insert into user(id,name,pwd) values(#{id},#{name},#{pwd})
    </insert>
    </mapper>

例3:修改用户

  1. Mapper接口中添加方法

    public interface UserMapper {
    //查询全部用户
    List<User> getUserList();
    //根据id查询用户
    User getUserById(int id);
    //添加用户
    int addUser(User user);
    //修改用户
    int updateUser(User user);
    }
  2. 在UserMapper.xml中添加Select语句

    <mapper namespace="mapper.UserMapper">
    <!-- 查询语句 -->
    <!-- 里面的id对应上面接口的方法名 -->
    <select id="getUserList" resultType="com.wu.pojo.User">
    select * from user
    </select>
    <!--根据id查询用户,用'#'取方法参数-->
    <select id="getUserById" parameterType="int" resultType="com.wu.pojo.User">
    select * from User whele id = #{id}
    </select>
    <!--插入用户,对象中对属性可以直接取出来-->
    <insert id="addUser" parametertype"com.wu.pojo.User">
    insert into user(id,name,pwd) values(#{id},#{name},#{pwd})
    </insert>
    <!--更新用户-->
    <update id="updateUser" parameterType="com.wu.pojo.User">
    update user set name=#{name},pwd =#{pwd} where id=#{id}
    </update>


    </mapper>

例4:删除用户

  1. Mapper接口中添加方法

    public interface UserMapper {
    //查询全部用户
    List<User> getUserList();
    //根据id查询用户
    User getUserById(int id);
    //添加用户
    int addUser(User user);
    //修改用户
    int updateUser(User user);
    //删除用户
    int deleteUser(int id);
    }
  2. 在UserMapper.xml中添加Select语句

    <mapper namespace="mapper.UserMapper">
    <!-- 查询语句 -->
    <!-- 里面的id对应上面接口的方法名 -->
    <select id="getUserList" resultType="com.wu.pojo.User">
    select * from user
    </select>
    <!--根据id查询用户,用'#'取方法参数-->
    <select id="getUserById" parameterType="int" resultType="com.wu.pojo.User">
    select * from User whele id = #{id}
    </select>
    <!--插入用户,对象中对属性可以直接取出来-->
    <insert id="addUser" parametertype"com.wu.pojo.User">
    insert into user(id,name,pwd) values(#{id},#{name},#{pwd})
    </insert>
    <!--更新用户-->
    <update id="updateUser" parameterType="com.wu.pojo.User">
    update user set name=#{name},pwd =#{pwd} where id=#{id}
    </update>
    <!--删除用户-->
    <delete id="deleteUser" parameterType="int">
    delete from user where id =#{id}
    </delete>
    </mapper>

3. 万能map

实体类,或数据库中的表,字段或参数过多,考虑使用Map。

  • 在 UserMapper 添加接口方法
User getUserById2(Map<String,Object> map);
  • 在UserMapper.xml中添加该方法的语句

    <!--这个后面的参数对应map的key,名字可以自己随便取,不要求和实体类一一对应-->
    <select id="getUserById2" parameterType="map" resultType="com.wu.pojo.User">
    select * from user where id = #{userid} and name =#{username}
    </select>
  • 测试类中测试

    @Test
    public void getUserById2() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("userid", 1);
    map.put("username", "张三");
    User user = mapper.getUserById2(map);
    System.out.println(user);
    sqlSession.close();
    }

    Map传递参数,直接在sql中取出key即可! 【parameter=“map”】

    对象传递参数,直接在sql中取出对象的属性即可! 【parameter=“Object”】

    只有一个基本类型参数的情况下,可以直接在sql中取到

    多个参数用Map , 或者注解!

4. 模糊查询

  • 在 UserMapper 添加接口方法

    List<User> getUserLike(String value);
  • 在UserMapper.xml中添加该方法的语句

    <!--也可以用concat拼接-->
    <select id="getUserList2" resultType="com.wu.pojo.User">
    select * from user where name like "%"#{value}"%"
    </select>
------ 本文结束感谢您的阅读 ------