代码实现
数据持久层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查询用户
-
Mapper接口中添加方法
public interface UserMapper { List<User> getUserList(); User getUserById(int id); }
-
在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:增加用户
-
Mapper接口中添加方法
public interface UserMapper { //查询全部用户 List<User> getUserList(); //根据id查询用户 User getUserById(int id); //添加用户 int addUser(User user); }
-
在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:修改用户
-
Mapper接口中添加方法
public interface UserMapper { //查询全部用户 List<User> getUserList(); //根据id查询用户 User getUserById(int id); //添加用户 int addUser(User user); //修改用户 int updateUser(User user); }
-
在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:删除用户
-
Mapper接口中添加方法
public interface UserMapper { //查询全部用户 List<User> getUserList(); //根据id查询用户 User getUserById(int id); //添加用户 int addUser(User user); //修改用户 int updateUser(User user); //删除用户 int deleteUser(int id); }
-
在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>