1.namespace
namespace中的包名要和 Dao/mapper接口的包名一致!
2.select选择,查询语句
-
id:就是对应的namespace中的方法名;
-
resultType: Sql语句执行的返回值
-
parameterType :参数类型
-
举例:根据id查询用户
UserMapper接口中添加方法:
//根据用户id查询用户 User getUserById(int id);
UserMapper.xml中添加查询语句:
<select id="getUserById" parameterType="int" resultType="com.likea.pojo.User"> <!--参数名需要和方法的参数名保持一致都是id--> select * from user where id=#{id} </select>
测试:
@Test public void getUserById(){ //创建sqlSession,获取执行sql的对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); //获取getMapper UserMapper mapper = sqlSession.getMapper(UserMapper.class); //调用查找方法 User user = mapper.getUserById(2); System.out.println(user); //关闭资源 sqlSession.close(); }
3.insert插入
-
参数类型是User对象
-
举例:插入一个用户,三个字段,将其封装成User对象当成参数传入
UserMapper接口中添加方法:
//添加一个用户 boolean addUser(User user);
UserMapper.xml中添加插入语句:
<insert id="addUser" parameterType="com.likea.pojo.User"> <!--对象中的属性能直接取出--> insert into user values(#{id},#{username},#{password}) </insert>
测试:
@Test public void addUser() { //增删改需要提交事务,否则不会产生影响 //获取sql执行对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); //getMapper UserMapper mapper = sqlSession.getMapper(UserMapper.class); //方法一:传入的参数 User user = new User(); user.setId(4); user.setUsername("赵六"); user.setPassword("111111"); //方法二:传入参数,有参构造 User user1 = new User(5, "田七", "77777"); //调用插入方法 boolean flag = mapper.addUser(user); boolean flag1 = mapper.addUser(user1); if (flag && flag1) { System.out.println("赵六插入成功与否:" + flag); System.out.println("田七插入成功与否:" + flag1); } //提交事务 sqlSession.commit(); //关闭资源 sqlSession.close(); }
4.update修改
-
举例:修改用户,传入User类型的参数,也需要提交事务
UserMapper接口中添加方法:
//修改用户 int updateUser(User user);
UserMapper.xml中添加修改语句:
<update id="updateUser" parameterType="com.likea.pojo.User"> update user set username=#{username},password=#{password} where id=#{id} </update>
测试:
@Test public void updateUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); int i = mapper.updateUser(new User(1, "刘洋", "88888888")); if (i>0){ System.out.println("修改成功!"); } //增删改需要提交事务,不然不影响数据库的数据 sqlSession.commit(); sqlSession.close(); }
5.delete删除
-
举例:删除用户通过id
UserMapper接口中添加方法:
//删除用户 int deleteUserById(int id);
UserMapper.xml中添加删除语句:
<delete id="deleteUserById" parameterType="int"> delete from user where id=#{id} </delete>
测试:
@Test public void deleteUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); int i = mapper.deleteUserById(1); if (i>0){ System.out.println("删除成功"); } sqlSession.commit(); sqlSession.close(); }
6.总结
-
编写接口
-
编写对应的mapper中的sql语句
-
测试:增删改需要提交事务
7.万能的Map
假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应当考虑使用Map!
-
举例:使用map做参数添加用户
UserMapper接口中添加方法:
//使用map做参数添加用户 int addUser1(Map<String,Object> map);
UserMapper.xml中添加插入语句:
<insert id="addUser1" parameterType="map"> <!--传递的参数名是map的键key--> insert into user(id,username,password) values(#{id},#{name},#{pwd}) </insert>
测试:
@Test public void addUser1() { SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); Map<String, Object> map = new HashMap<>(); map.put("id",8); map.put("name","王霸"); map.put("pwd","66666"); int i = mapper.addUser1(map); if (i>0){ System.out.println("插入成功"); } sqlSession.commit(); sqlSession.close(); }
-
举例:查询用户通过不止一个字段,用Map作为参数
UserMapper接口中添加方法:
//使用map作为参数,查询用户 User getUser1(Map<String,Object> map);
UserMapper.xml中添加查询语句:
<select id="getUser1" parameterType="map" resultType="com.likea.pojo.User"> select * from user where id=#{id} and username=#{name} </select>
测试:
@Test public void getUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); HashMap<String, Object> map = new HashMap<>(); map.put("id",1); map.put("name","田七"); User user = mapper.getUser1(map); System.out.println(user); sqlSession.close(); }
-
Map传递参数,直接在sql中取出key即可!
-
对象传递参数,直接在sql中取对象的属性即可!
-
只有一个基本类型参数的情况下,可以直接在sql中取到,和形参名一致!
-
多个参数用map或注解
8.模糊查询
-
举例:根据用户名模糊查询用户列表
UserMapper接口中添加方法:
//通过用户名模糊查询用户列表 List<User> getUserLike(String value);
UserMapper.xml中添加查询语句:
<select id="getUserLike" resultType="com.likea.pojo.User"> select * from user where username like #{value} </select>
测试:
@Test public void getUserLike() { SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); //第一种方式:在传参的时候使用通配符 List<User> userList = mapper.getUserLike("%李%"); for (User user : userList) { System.out.println(user); } sqlSession.close(); }
-
第一种方式:在传参的时候使用通配符
-
第二种方式:在sql中使用通配符
<select id="getUserLike" resultType="com.likea.pojo.User"> select * from user where username like "%"#{value}"%" </select>