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

Mybatis

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

Mybatis

Mybatis概述

MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理注册驱动、创建Connection、创建Statement、手动设置参数、结果集检索及映射等繁杂的过程代码。

1.基本操作 配置文件


注:lib包需解压

db.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm_db1
jdbc.username=root
jdbc.password=123456

SqlMapConfig.xml














    


    
        
    
    
    
        
        
            
            
            
            
                
                
                
                
                
            
        
    

    

        
        

    

创建domain包,定义Javabean

定义mapper包,创建接口

查询所有
测试类

public class Test01_SelectAll {
    public static void main(String[] args) throws IOException {
        //1 加载配置文件
        InputStream is= Resources.getResourceAsStream("SqlMapConfig.xml");
        //2 获得工厂
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
        //3 通过工厂获得会话(连接)
        SqlSession sqlSession=factory.openSession();
        //4 获得功能接口
        UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
        //4 调用功能
        List userList = userMapper.selectAll();

        //5 打印查询结果
        for (User user : userList) {
            System.out.println(user);
        }
    }
}

UserMapper代码

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

添加
测试类

public class Test03_Insert {
    public static void main(String[] args) throws IOException {
        // 模拟数据
        User user = new User();
        user.setUid("u004");
        user.setUsername("111");
        user.setPassword("fanlonggege");

        //1 加载配置文件
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2 获得工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        //3 通过工厂获得会话
        SqlSession sqlSession = factory.openSession();
        //4 通过会话获得功能接口
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //5 添加
        Integer result = userMapper.insert(user);

        // 提交
        sqlSession.commit();

        //6 处理数据
        System.out.println(result);
        //7 释放资源
        sqlSession.close();
    }
}

UserMapper代码

    @Insert("INSERT INTO `user`(uid,username,`password`) VALUES(#{uid},#{username},#{password})")
    public Integer insert(User user);

模糊查询
测试类

public class Test02_Like {
    public static void main(String[] args) throws IOException {
        //1 加载配置文件
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2 获得工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        //3 通过工厂获得会话
        SqlSession sqlSession = factory.openSession();
        //4 通过会话获得功能接口
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //5 查询
        List list = userMapper.selectByName("三");
        //6 处理数据
        for (User user : list) {
            System.out.println(user);
        }
        //7 释放资源
        sqlSession.close();
    }
}

UserMapper代码

 
    @Select("SELECT * FROM `user` WHERe `name` LIKE '%${name}%'")
    public List selectByName(@Param("name") String name);

更新
测试类

public class Test04_Update {
    public static void main(String[] args) throws IOException {
        // 模拟数据
        User user = new User();
        user.setUid("u004");
        user.setUsername("利古拉斯");
        user.setPassword("123456");
        user.setName("789");

        //1 加载配置文件
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2 获得工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        //3 通过工厂获得会话
        SqlSession sqlSession = factory.openSession();
        //4 通过会话获得功能接口
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //5 添加
        Integer result = userMapper.update(user);
        // 提交
        sqlSession.commit();

        //6 处理数据
        System.out.println(result);
        //7 释放资源
        sqlSession.close();
    }
}

UserMapper代码

    @Update("UPDATE `user` SET username=#{username},`password`=#{password}, `name`=#{name} WHERe uid = #{uid};")
    public Integer update(User user);
核心配置文件详解:

properties 用于抽取经常修改的内容

方式1:直接抽取

方式2:将进行修改的内容抽取到properties文件中

开启驼峰映射


    
        
        
    

加载一个类


        
         
    

加载一个包

 
        
        
    
API详解

导入MybatisUtils

public class MyBatisUtils {

    // 会话工厂
    private static SqlSessionFactory factory;
    static{
        try {
            // 1.1 加载核心配置文件
            InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
            // 1.2 获得工厂
            factory = new SqlSessionFactoryBuilder().build(is);

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    private static ThreadLocal local = new ThreadLocal<>();

    
    private static SqlSession openSession(){
        SqlSession sqlSession = local.get();
        if(sqlSession == null){
            sqlSession = factory.openSession();
            local.set(sqlSession);
        }
        return sqlSession;
    }

    
    public static  T getMapper(Class clazz){
        return openSession().getMapper(clazz);
    }

    
    public static void close() {
        SqlSession sqlSession = openSession();
        if(sqlSession != null){
            sqlSession.close();
        }
    }

    
    public static void commitAndclose() {
        SqlSession sqlSession = openSession();
        if(sqlSession != null){
            sqlSession.commit();
            close();
        }
    }

    
    public static void rollbackAndclose() {
        SqlSession sqlSession = openSession();
        if(sqlSession != null){
            sqlSession.rollback();
            close();
        }
    }

}

编写Vo,条件查询封装类

public class UserVo {
    private String beginTime;
    private String endTime;

  //get set方法

编写功能接口

 
    @Select("SELECT * FROM `user` WHERe birthday >= #{beginTime} AND birthday <= #{endTime}")
    public List condition(UserVo userVo);

测试

  public static void main(String[] args) throws IOException {

        //1 通过会话获得功能接口
        UserMapper userMapper = MyBatisUtils.getMapper(UserMapper.class);
        //2 更新
        UserVo userVo = new UserVo();
        userVo.setBeginTime("2010");
        userVo.setEndTime("2020");
        List list = userMapper.condition(userVo);
        // 打印结果
        list.forEach(System.out::println);
        //3 提交并关闭
        MyBatisUtils.commitAndclose();
    }
输出:结果集映射
  • 结果集映射:查询结果 与 JavaBean之间的映射关系。表的列名和JavaBean的属性名对应关系。
  • @Results 用于配置JavaBean和表的映射关系的
    • @Result 配置JavaBean一个属性和 表的一个列之间对应关系。
  • @ResultMap 共享已经映射关系
  • 实例1:JavaBean和表映射关系
 @Select("select * from user")
    @Results({
            @Result(column = "user_name",property = "userName"),
            @Result(column = "password", property = "password")
    })
    public List selectAll();

实例2:共享映射关系

 @Select("SELECT * FROM `user` WHERe `name` LIKE '%${name}%'")
    @ResultMap("userResultMap")
    public List selectByName(@Param("name") String name);
多表操作:一对多

JavaBean:User

public class User {
    private String uid;
    private String userName;
    private String password;
    private String name;
    private String email;
    private Date birthday;
    private String sex;
    private Integer state;
    private String code;

JavaBean:Order

public class Order {
    private String oid; 		// 订单编号
    private Date ordertime; 	// 下单时间
    private Double total; 		// 订单总金额
    private Integer state; 		// 订单状态 0 未支付 1 已支付 2已发货 3已收货
    private String address;		// 收货人地址
    private String name;		// 收货人姓名
    private String telephone;	// 收货人电话
    private String uid;

对应关系

public class User {

    // 一对多关系:一个用户拥有多个订单
    private List orderList = new ArrayList<>()

UserMapper

public interface UserMapper {

    
    @Select("select * from user")
    @Results(id="userResultMap", value={
            @Result(column = "user_name",property = "userName"),
            @Result(column = "password", property = "password")
    })
    public List selectAll();
}

OrderMapper
查询指定用户的所有的订单

public interface OrderMapper {

    
    @Select("SELECT * FROM orders WHERe uid = #{uid}")
    public List selectAllByUid(@Param("uid") String uid);
}

user测试

public class Test01_SelectAll {
    public static void main(String[] args) throws IOException {
        //1 加载配置文件
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2 获得工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        //3 通过工程获得会话(连接)
        SqlSession sqlSession = factory.openSession();
        //4 获得功能接口
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //5 进行查询
        List list = userMapper.selectAll();
        //6 处理数据
        for(User user: list) {
            System.out.println(user);
        }
        //7 释放资源
        sqlSession.close();
    }
}

order测试

public class Test02_SelectAllOrderByUId {
    public static void main(String[] args) throws IOException {
        //1 加载配置文件
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2 获得工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        //3 通过工程获得会话(连接)
        SqlSession sqlSession = factory.openSession();
        //4 获得功能接口
        OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
        //5 进行查询
        List list = orderMapper.selectAllByUid("u001");
        //6 处理数据
        list.forEach(System.out::println);
        //7 释放资源
        sqlSession.close();
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/345279.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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