狂神MyBatis笔记

本文详细介绍了MyBatis中数据持久层的实现,包括如何在接口定义Mapper,以及在Mapper.xml文件中编写SQL语句进行增删查改操作。通过User实体类和UserMapper接口为例,展示了namespace的绑定、SQL语句的编写,如根据ID查询、添加、更新和删除用户的方法。同时,还提到了使用Map作为参数进行模糊查询的实现方式。
摘要由CSDN通过智能技术生成

代码实现

数据持久层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>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值