mybatis的注解开发基本注解

Mybatis的注解开发

其实就是用注解代替xml文件,因为读取XML文件太慢,使用注解开发就省去了这一步很方便

单表的crud操作

首先我们会借助到一些注解

  • @Results 这个使用来连接实体类的
  • @Result 用来书写实体类里面的属性和数据库中字段的对应
    直接写在接口里面
 //@Results  等价于  resultMap
    // @Result  相当于  result和id的组合
    @Results(
            id = "userMap",//这个就是唯一标识,后来直接使用这个标识就可以了
            value = {
                //主键id才有写true  不是主键的id就不要用写了
                @Result ( id = true , property = "userId",column = "id"),
                @Result ( property = "userName",column = "username"),
                    @Result ( property = "userAge",column = "age"),
                    @Result ( property = "userAddress",column = "address"),
                    @Result ( property = "userGender",column = "gender"),
                    @Result ( property = "userRid",column = "u_rid"),
                    @Result ( property = "userDid",column = "u_did"),
                    @Result( property = "department",
                            column = "u_did",
                            one = @One(select = "com.zhiyou100.dao.IDepartmentDao.queryDepartmentById")
                    )

            }
    )
  • @Select 查询用到的注解
  //查询所有的用户信息
    @Select("select * from user")//但是我们实体类里面,属性和表哦字段不一样,所以不能直接匹配
    List<User> queryAllUsers();
  • @Insert 插入需要使用的标签
  • @SelectKey 查询主键
 //添加一条数据  得到新增数据的id值
    @Insert("insert into user (username,age,address,gender) value(#{userName},#{userAge},#{userAddress},#{userGender}) ")
    //查询主键,等价于  xml中的selectKey中的标签
    // keyColumn   表示将查询结果赋值给数据库表中哪一列
    // keyProperty  表示查询结果赋值给代码中的哪个对象
    // resultType   填入 keyProperty 的 Java 类型  这里要填写包装类的.class
    // before   可以设置为 true 或false。要运行的SQL语句。
    /*
	before=true表示插入之前进行查询,可以将查询结果赋给keyProperty和keyColumn,赋给keyColumn相当于更改数据库。
before=false表示先插入,再查询,这时只能将结果赋给keyProperty。
	*/
	//statementType   要运行的SQL语句,它的返回值通过resultType来指定
    @SelectKey(keyColumn = "id" ,keyProperty = "userId" ,resultType = Integer.class ,before = false,statement = "SELECT LAST_INSERT_ID()")//SELECT LAST_INSERT_ID()意思是返回新增数据的id值
    int addUser(User user);
  • @Update 修改会用到的注解
  //更新数据库
    @Update("update user set username = #{userName},age = #{userAge},address = #{userAddress} , gender = #{userGender} where id = #{userId}  ")
    int updateUser(User user);
  • @Delete 删除会用到的注解
 //根据id值删除用户信息
    @Delete("delete from user where id = #{userId}")
    int deleteUserById(int id);
  • @ResultMap 用来把Results带入到我们要使用的方法中
    //引入上面的userMap  相当于  select  标签里面的resultMap
    @ResultMap("userMap")//这样就把上面的userMap引入了
    //根据id值查询信息
    @Select("select * from user where id = #{id}")
    User queryUserById(int id);
  • @SelectProcide 实现sql的动态拼接

下面是直接取测试类里面测试直接跳过xml配置文件

 /**
     * 测试查询所有用户信息
     */
    @Test
    public void testQueryAllUsers(){
        List<User> users = userDao.queryAllUsers();
        for (User user : users) {
            System.out.println(user);
        }
    }



    //通过id查询
    @Test
    public void testQueryUserById(){
        User user = userDao.queryUserById(5);
        System.out.println(user);
    }


    //添加用户数据  问题
    @Test
    public void testAddUser(){
        User user = new User();
        user.setUserAddress("十五大街");
        user.setUserAge(15);
        user.setUserGender("男");
        user.setUserName("马达过");
        int i = userDao.addUser(user);
        System.out.println("影响数据库的行数"+i);
        System.out.println("新增用户id值" + user.getUserId());
    }



    //测试更新数据库   问题
    @Test
    public void testUpdateYUserById(){
        User user = new User();
        user.setUserName("马达不过");
        user.setUserGender("女");
        user.setUserAge(111);
        user.setUserAddress("十四大姐");
        user.setUserId(11);
        int i = userDao.updateUser(user);
        //根据用户名查询
        List<User> users = userDao.queryUserByUserName("马");
        System.out.println(users);
        System.out.println(i);
    }


    //根据id值删除用户信息
    @Test
    public void testDeleteUserById(){
        int i = userDao.deleteUserById(9);
        System.out.println(i);
    }


    //测试用户总数
    @Test
    public void testUserTotal(){
        int i = userDao.queryTotal();
        System.out.println(i);
    }


    //测试模糊查询
    @Test
    public void test(){
        List<User> users = userDao.queryUserByUserName("涂");
        System.out.println(users);
    }


    private IUserDao userDao;
    private InputStream is;
    private SqlSession sqlSession;

    @Before
    public void init() throws IOException {
        // 准备mybatis核心配置文件的路径  类路径 classpath  存放在本地磁盘中classes目录里面的路径
        String path = "mybatis-config.xml";
        // 使用mybatis内置IO类 Resources
        is = Resources.getResourceAsStream(path);
        // 通过构建者类去构建SqlSessionFactory工厂对象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        // 通过工厂生产SqlSession对象
        //sqlSession = factory.openSession(true);// setAutoCommit(false) ---> start transaction
        sqlSession = factory.openSession();// setAutoCommit(false) ---> start transaction
        // 使用SqlSession对象 调用getMapper方法 获取对应接口代理对象
        userDao = sqlSession.getMapper(IUserDao.class);
    }

    @After
    public void release() throws IOException {
        sqlSession.commit(); // 提交事务  让修改的数据进行持久化,存储到磁盘中
        is.close();
        sqlSession.close();
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值