栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis注解开发

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatis注解开发

1、常用注解

@Insert:新增

@Update:更新

@Delete:删除

@Select:查询

@Result:结果集封装

@Results:可以与@Result 一起使用,封装多个结果集

@One:一对一结果集封装

@Many:一对多结果集封装

2、简单的增删改查

(1)创建项目

 (2)配置pom.xml文件


      junit
      junit
      4.11
      test
    
    
      mysql
      mysql-connector-java
      5.1.45
    
    
      org.mybatis
      mybatis
      3.4.6
    
    
      log4j
      log4j
      1.2.17
    

(3)编写实体类和数据库

public class User {
    private int id;
    private String username;
    private String password;
    private Date birthday;}

(4)配置核心文件SQLMapConfig.xml





    
    

    
    
        
            
            
                
                
                
                
            
        
    

    
    

    
    
        
        
    


(5)配置UserMapper.xml文件(使用注解后不需要此文件)





    
        insert into user values(#{id},#{username},#{password},#{birthday})
    

     
        delete from user where id=#{id}
    

    
        update user set username=#{username},password=#{password} where id=#{id}
    

    
        select * from user where id=#{id}
    


使用注解:直接在UserMapper接口中写入SQL语句

package com.dhh.mapper;

import com.dhh.domain.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface UserMapper {
    @Insert("insert into user values(#{id},#{username},#{password},#{birthday})")
    public void save(User user);

    @Update("update user set username=#{username},password=#{password} where id=#{id}")
    public void update(User user);

    @Delete("delete from user where id=#{id}")
    public void delete(int id);

    @Select("select * from user where id=#{id}")
    public User findById(int id);

    @Select("select * from user")
    public List findAll();

}

(6)编写测试类

package com.dhh.test;

import com.dhh.domain.User;
import com.dhh.mapper.UserMapper;
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.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MyBatisTest {
    private UserMapper mapper;

    @Before    //代码抽取
    public void before() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        mapper = sqlSession.getMapper(UserMapper.class);
    }

    @Test
    public void testSave(){
        User user =new User();
        user.setUsername("sisi");
        user.setPassword("111");
        mapper.save(user);
    }

    @Test
    public void testUpdate(){
        User user =new User();
        user.setId(5);
        user.setUsername("sisi");
        user.setPassword("123");
        mapper.update(user);
    }

    @Test
    public void testDelete(){
        User user =new User();
        mapper.delete(17);
    }

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

    @Test
    public void testFindAll(){
        List all= mapper.findAll();
        for (User user:all) {
            System.out.println(user);
        }
    }
}
3、MyBatis的注解实现复杂映射开发

我们可以使用@Result注解、@Results注解、@One注解、@Many注解组合完成复杂关系配置

3.1 一对一 

(1)编写实体类和数据库

public class Order {
    private int id;
    private Date ordertime;  //下单时间
    private double total;   //总金额
    private User user;   //当前订单属于哪一个用户
}

 (2)使用注解:直接在OrderMapper.xml接口中写入SQL语句

package com.dhh.mapper;

import com.dhh.domain.Order;
import com.dhh.domain.User;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface OrderMapper {

    @Select("select * from orders where uid=#{uid}")
    public List findByUid(int uid);

    

    //一对一查询方式二
    @Select("select * from orders")
    @Results({
            @Result(column = "oid",property = "id"),
            @Result(column = "ordertime",property = "ordertime"),
            @Result(column = "total",property = "total"),
            @Result(
                    property = "user",//要封装的属性名称
                    column = "uid",//根据哪个字段去查询user表的数据
                    javaType = User.class,//要封装的实体类型
                    //select属性,代表查询的哪个接口的方法获得数据
                    one=@One(select = "com.dhh.mapper.UserMapper.findById")
            )
    })
    public List findAll();


}

(3)测试代码

package com.dhh.test;

import com.dhh.domain.Order;
import com.dhh.domain.User;
import com.dhh.mapper.OrderMapper;
import com.dhh.mapper.UserMapper;
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.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MyBatisTest2 {
    private OrderMapper mapper;

    @Before
    public void before() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        mapper = sqlSession.getMapper(OrderMapper.class);
    }

    @Test
    public void testSave(){

        List all = mapper.findAll();
        for(Order order : all){
            System.out.println(all);
        }
    }


}
3.2 一对多

(1)创建实体类

public class User {
    private int id;
    private String username;
    private String password;
    private Date birthday;

   //当前用户具有的订单
    private List orderList;
}

(2)在UserMapper接口中添加如下代码:

@Select("select * from user")     //一对多  
    @Results({
            @Result(id = true, column = "id",property = "id"),
            @Result(column = "username",property = "username"),
            @Result(column = "password",property = "password"),
            @Result(
                    property = "orderList",
                    column = "id",
                    javaType=List.class,
                    many = @Many(select="com.dhh.mapper.OrderMapper.findByUid")
            )
    })
    public List findUserAndOrderAll();

使用OrderMapper接口中的方法(子查询)

(4)测试

package com.dhh.test;

import com.dhh.domain.Order;
import com.dhh.domain.User;
import com.dhh.mapper.OrderMapper;
import com.dhh.mapper.UserMapper;
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.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MyBatisTest3 {
    private UserMapper mapper;

    @Before
    public void before() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        mapper = sqlSession.getMapper(UserMapper.class);
    }

    @Test
    public void testSave(){
        List userAndOrderAll= mapper.findUserAndOrderAll();
        for (User user:userAndOrderAll) {
            System.out.println(user);
        }
    }
}
3.3 多对多

(1)创建实体类

public class Role {
    private int id;
    private String roleName;
    private String roleDesc;
}

在User实体类中追加属性:

    //当前用户具备哪些角色
    private List roleList;

(2)新建RoleMapper接口,编写role方法(子查询使用)

public interface RoleMapper {
    @Select("select * from sys_user_role ur,sys_role r where ur.roleId=r.id and ur.userId=#{uid}")
    public List findByUid(int uid);
}

(3)在UserMapper接口中添加如下代码:

@Select("select * from user")   //多对多
    @Results({
            @Result(id = true,column = "id",property = "id"),
            @Result(id = true,column = "username",property = "username"),
            @Result(id = true,column = "password",property = "password"),
            @Result(
                    property = "roleList",
                    column = "id",
                    javaType = List.class,
                    many = @Many(select = "com.dhh.mapper.RoleMapper.findByUid")
            )
    })
    public List findUserAndRoleAll();

(4)测试

package com.dhh.test;

import com.dhh.domain.User;
import com.dhh.mapper.UserMapper;
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.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MyBatisTest4 {
    private UserMapper mapper;
    //多对多
    @Before
    public void before() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        mapper = sqlSession.getMapper(UserMapper.class);
    }

    @Test
    public void testSave(){
        List userAndRoleAll= mapper.findUserAndRoleAll();
        for (User user:userAndRoleAll) {
            System.out.println(user);
        }
    }
}

总结:坚持很难,放弃容易,再接再厉,一起进步!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/831878.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号