package cn.water.dao;import cn.water.domain.User;import org.apache.ibatis.annotations.*;import java.util.List;/**
* @author Water
* @date 2019/10/12 - 16:43
* @description Java实体类的变量名 与 数据库的字段名 相同
*/publicinterfaceUserDao{/** 添加用户 */@Insert("INSERT INTO user VALUES(#{id},#{username},#{birthday},#{sex},#{address})")intadd(User user);/** 更新用户 */@Update("update user set username=#{username},sex=#{sex},birthday=#{birthday},address=#{address} where id=#{id}")intupdate(User user);/** 删除用户 */@Delete("DELETE FROM user WHERE id = #{id}")intdelete(Integer id);/** 查询所有用户 */@Select("SELECT * FROM user ")
List<User>findAll();/** 查询单个用户 */@Select("SELECT * FROM user WHERE id = #{uid}")
User findOne(Integer userId);/** 根据姓名模糊查询 */@Select("SELECT * FROM user WHERE username LIKE #{username}")
List<User>findByName01(String name);@Select("SELECT COUNT(*) FROM user")/** 查询所有用户的数量 */
Integer findTotal();}
User_UserDao.java
package cn.water.dao;import cn.water.domain.User;import org.apache.ibatis.annotations.*;import java.util.List;/**
* @author Water
* @date 2019/10/13 - 11:50
* @description 由于 Java实体类的变量名 与 数据库的字段名 不相同
* 所以需要对 需要封装结果集的操作(查询操作) 进行设置
*/publicinterfaceUser_UserDao{/** 查询所有用户 */@Select("SELECT * FROM user ")@Results(id ="user_userMap",
value ={@Result(id =true,column ="id",property ="userId"),@Result(id =true,column ="username",property ="userName"),@Result(id =true,column ="birthday",property ="userBirthday"),@Result(id =true,column ="sex",property ="userSex"),@Result(id =true,column ="address",property ="userAddress")})
List<User>findAll();/** 查询用户,根据ID */@Select("SELECT * FROM user WHERE id=#{id}")@ResultMap("user_userMap")
User findById(Integer id);/** 模糊查询,根据username */@Select("SELECT * FROM user WHERE username LIKE '%${value}%' ")@ResultMap("user_userMap")
List<User>findByName(String username);}
测试类
UserTest.java
package cn.water;import cn.water.dao.UserDao;import cn.water.domain.User;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.After;import org.junit.Before;import org.junit.Test;import java.io.IOException;import java.io.InputStream;import java.util.Date;/**
* @author Water
* @date 2019/10/13 - 10:48
* @description
*/publicclassUserTest{private InputStream inputStream;private SqlSessionFactory factory;private SqlSession session;private UserDao dao;@Beforepublicvoidinit()throws IOException {
inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
factory =newSqlSessionFactoryBuilder().build(inputStream);
session = factory.openSession(true);
dao = session.getMapper(UserDao.class);}@Afterpublicvoid destroy ()throws IOException {
session.close();
inputStream.close();}/** 添加用户 */@Testpublicvoidtest01(){
User user =newUser();
user.setId(1);
user.setUsername("mybatis anno add");
user.setBirthday(newDate());
user.setSex("男");
user.setAddress("北京");
System.out.println("受影响的行数:"+dao.add(user));}/** 更新用户 */@Testpublicvoidtest02(){
User user =newUser();
user.setId(1);
user.setUsername("mybatis anno update");
user.setBirthday(newDate());
user.setSex("男");
user.setAddress("北京");
System.out.println("受影响的行数:"+dao.update(user));}/** 删除用户 */@Testpublicvoidtest03(){
System.out.println("受影响的行数:"+dao.delete(1));}/** 查询所有用户 */@Testpublicvoidtest04(){for(User user : dao.findAll()){
System.out.println(user);}}/** 查询用户,根据ID */@Testpublicvoidtest05(){
System.out.println(dao.findById(42));}/** 模糊查询,根据username */@Testpublicvoidtest06(){// for (User user : dao.findByName("%王%")) {for(User user : dao.findByName("王")){
System.out.println(user);}}/** 查询用户数量 */@Testpublicvoidtest07(){
System.out.println(dao.findTotal());}}
@Insert("INSERT INTO user VALUES (#{id},#{username},#{birthday},#{sex},#{address})")int add (User user);
更新用户
持久层接口
@Update("UPDATE user SET username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} WHERE id=#{id}")int update (User user);
删除用户
持久层接口
@Delete("DELETE FROM user WHERE id=#{id}")int delete (Integer id);
查找所有用户
持久层接口
@Select("SELECT * FROM user ")
List<User>findAll();
查询单个用户
持久层接口
@Select("SELECT * FROM user WHERE id=#{id}")
User findById(Integer id);
根据姓名模糊查询
持久层接口
// @Select("SELECT * FROM user WHERE username LIKE #{username}")@Select("SELECT * FROM user WHERE username LIKE '%${value}%' ")
List<User>findByName(String username);
查询所有用户数量
持久层接口
@Select("SELECT COUNT(*) FROM user ")
Integer findTotal();
实现查询操作
当 Java实体类的变量名 与 数据库的字段名 不相同时,我们需要设置 @Results注解。
注解
@Result:实现结果集封装
id:是否是主键字段
column:数据库的列名
property:需要装配的属性名
one:需要使用的@One注解(@Result(one=@One)()))
many:需要使用的@Many注解(@Result(many=@many)()))
@Results:封装多个结果集
@ResultMap:实现引用@Results定义的封装
查找所有用户
持久层接口
@Select("SELECT * FROM user ")@Results(id ="user_userMap",
value ={@Result(id =true,column ="id",property ="userId"),@Result(id =true,column ="username",property ="userName"),@Result(id =true,column ="birthday",property ="userBirthday"),@Result(id =true,column ="sex",property ="userSex"),@Result(id =true,column ="address",property ="userAddress")})
List<User>findAll();
查询单个用户
持久层接口
@Select("SELECT * FROM user WHERE id=#{id}")@ResultMap("user_userMap")
User findById(Integer id);
根据姓名模糊查询
持久层接口
@Select("SELECT * FROM user WHERE username LIKE '%${value}%' ")@ResultMap("user_userMap")
List<User>findByName(String username);