3、CRUD
1、namespace
namespace中的包名要和dao/mapper接口中的包名一致!
2、select
选择、查询语句
- id:就是对应的namespace中的方法名;
- resultType:sql语句执行的返回值!
- parameterType:参数类型!
-
编写接口
//根据用户查询id; User getUserById(int id);
-
编写对应的mapper中的sql语句
<select id="getUserById" resultType="com.tr.pojo.User" parameterType="int"> select * from mybatis.user where id = #{id} </select>
-
测试
@Test public void getUserById() { SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user = userMapper.getUserById(1); System.out.println(user); sqlSession.close(); }
3、insert
-
编写接口
//增加用户 int addUser(User user);
-
编写对应的mapper中的sql语句
<insert id="addUser" parameterType="com.tr.pojo.User"> insert into mybatis.user(id, name, pwd) values (#{id},#{name},#{pwd}); </insert>
-
测试
@Test public void addUser() { SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); int i = userMapper.addUser(new User(4, "小林", "123456")); if (i > 0) { System.out.println("成功"); } sqlSession.commit(); sqlSession.close(); }
4、update
-
编写接口
//修改用户的相关信息 int updateUser(User user);
-
编写对应的mapper中的sql语句
<update id="updateUser" parameterType="com.tr.pojo.User"> update mybatis.user set name = #{name}, pwd = #{pwd} where id = #{id}; </update>
-
测试
@Test public void updateUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); int i = userMapper.updateUser(new User(4, "康娜酱", "123123")); if (i > 0 ){ System.out.println("成功"); } sqlSession.commit(); sqlSession.close(); }
5、delete
-
编写接口
//删除用户 int deleteUser(int id);
-
编写对应的mapper中的sql语句
<delete id="deleteUser" parameterType="int"> delete from mybatis.user where id = #{id}; </delete>
-
测试
@Test public void deleteUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); int i = userMapper.deleteUser(3); if (i > 0 ){ System.out.println("成功"); } sqlSession.commit(); sqlSession.close(); }
注意点:
- 增删改需要提交事务!
6、分析错误
-
标签不要匹配错
-
mapper.xml里面resourse路径必须斜杠/
-
程序配置文件必须符合规范 读错必须从后往前读
-
NullPointerException空指针异常 MybatisUtils中sqlsessionFactory没有正确的注册
-
输出的xml中有乱码问题----在设置中将编码格式改为utf-8
-
maven资源没有导出问题 比如dao中的xml文件无法读取 将下面的一段加在pom.xml中
<!--在build中配置resources,来防止我们资源导出失败的问题--> <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
7、万能的Map
假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应当考虑使用Map
-
编写接口
//用map来添加用户(不规范) int addUser2(Map<String, Object> map);
-
编写对应的mapper中的sql语句
<insert id="addUser2" parameterType="map"> insert into mybatis.user(id, name, pwd) VALUES (#{id}, #{username}, #{password}) </insert>
-
测试
@Test public void addUser2(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); Map<String, Object> map = new HashMap<>(); map.put("id", 5); map.put("username", "小林"); map.put("password", "123456"); userMapper.addUser2(map); sqlSession.commit(); sqlSession.close(); }
Map传递参数,直接在sql中取出key即可! 【parameterType=“map”】
对象传递参数,直接在sql中取对象的属性即可! 【parameterType=“Object”】
只有一个基本类型参数的情况下,可以直接在sql中取到!
多个参数用map,或者注解
8、模糊查询
模糊查询怎么写?
-
Java代码执行的时候,传递通配符 % %
List<User> userList = userMapper.getUserLike("%" + "酱" + "%");
-
在sql拼接中使用通配符!