美文网首页Mybatis入门到精通系列
09 Mybatis 注解开发 单表

09 Mybatis 注解开发 单表

作者: better_future | 来源:发表于2020-04-25 17:15 被阅读0次

mybatis 常用注解说明

@Insert:实现新增
@Update:实现更新
@Delete:实现删除
@Select:实现查询
@Result:实现结果集封装
@Results:可以与@Result 一起使用,封装多个结果集
@ResultMap:实现引用@Results 定义的封装
@One:实现一对一结果集封装
@Many:实现一对多结果集封装
@SelectProvider: 实现动态 SQL 映射
@CacheNamespace:实现注解二级缓存的使用

使用 Mybatis 注解实现基本 CRUD

实体类

@Data
public class User implements Serializable {
    private Integer userId;
    private String userName;
    private Date userBirthday;
    private String userSex;
    private String userAddress;
}

查询所有

    @Select("select * from user")
    @Results(
            id="userMap",
            value = {
                    @Result(id=true,column="id",property="userId"),
                    @Result(column="username",property="userName"),
                    @Result(column="sex",property="userSex"),
                    @Result(column="address",property="userAddress"),
                    @Result(column="birthday",property="userBirthday")
            })
    List<User> findAll();

接口中的方法添加注解,@Select是sql查询语句,@Results封装多个结果集
column数据库列名
property 实体类属性名
id="userMap" 可以实现复用

测试

public class AnnotationCRUDTest {
    private InputStream in;
    private SqlSessionFactory factory;
    private SqlSession session;
    private UserMapper userMapper;

    @Before
    public void init() throws IOException {
        //1.读取配置文件
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        factory = builder.build(in);
        //3.创建 session
        session = factory.openSession();
        //4.创建代理对象
        userMapper = session.getMapper(UserMapper.class);
    }

    @After//junit 的注解
    public void destroy()throws Exception {
        //提交事务
        session.commit();
        //释放资源
        session.close();
        //关闭流
        in.close();
    }

    @Test
    public void testFindAll(){
        List<User> all = userMapper.findAll();
        for(User user:all){
            System.out.println(user);
        }
    }
}

根据id 查询user对象

    @Select("select * from user where id = #{uid}")
    @ResultMap("userMap")
    User findById(Integer userId);

@ResultMap实现对上面的Results的引用

 @Test
    public void testFindById(){
        User user = userMapper.findById(41);
        System.out.println(user);
    }

插入操作

 @Insert("insert  into user(username,sex,birthday,address)values(#{userName}, #{userSex}, #{userBirthday},#{userAddress})")
@SelectKey(keyColumn="id",keyProperty="userId",resultType=Integer.class,before = false, statement = { "select last_insert_id()" })
    int saveUser(User user);

属性介绍:
#{}x写的是实体类的属性
获取返回值,封装到keyProperty属性中去就是实体类的userId属性
keyColumn是数据库的id
resultType是返回值的类型,id是整数
测试

@Test
  public void testSave(){
        User user = new User();
        user.setUserName("张飞");
        user.setUserAddress("北京");
        user.setUserBirthday(new Date());
        user.setUserSex("男");
        int res = userMapper.saveUser(user);

        System.out.println("影响行数"+res);
        System.out.println("插入主键值"+user.getUserId());
    }

更新操作

//根据id更新记录
    @Update("update user set username=#{userName},address=#{userAddress},sex=#{userSex},birthday=#{userBirthday} where id=#{userId} ")
    int updateUser(User user);
 @Test
    public void testUpdate(){
        User user = new User();
        user.setUserId(41);
        user.setUserName("zzzzzzzzz");
        userMapper.updateUser(user);
    }

此时会更新user id为41的数据,根据sql语句可知如果没有设置的属性那么,更新后是空的。

删除操作

@Delete("delete from user where id = #{uid}")
    int deleteUser(Integer userId);

对于 Integer以及其他基本数据类型的参数#{uid}可以任意写

@Test
    public void testDelete(){
        int i = userMapper.deleteUser(57); //返回影响行数
        System.out.println(i);
    }

聚合查询

    //聚合函数
    @Select("select count(*) from user")
    int findTotal();
 @Test
    public void testCount(){
        int total = userMapper.findTotal();
        System.out.println(total);
    }

模糊查询

    //模糊查询
    @Select("select * from user where username like #{username}")
    List<User> findByName(String name);
@Test
    public void findByName(){
        List<User> users = userMapper.findByName("%张%");
        for(User u:users){
            System.out.println(u);
        }
    }

相关文章

网友评论

    本文标题:09 Mybatis 注解开发 单表

    本文链接:https://www.haomeiwen.com/subject/jnnhwhtx.html