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

MyBatis笔记

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

MyBatis笔记

MyBatis 概述

持久层,java编写,
封装了jdbc操作的很多细节,使开发者只需关注sql语句本身,而无需关注注册驱动,创建连接等繁琐过程
,它使用了ORM思想实现了结果集的封装

ORM

Object Relational Mapping对象映射

简单来说:把数据库表和实体类以及实体类的属性对应起来,
让我们以操作实体类来操作数据库表

初始
  • 创建maven项目
  • 导入依赖
    

        
        
            mysql
            mysql-connector-java
            8.0.21
        


        
        
            org.mybatis
            mybatis
            3.5.3
        

        
        
            junit
            junit
            4.12
            test
        

    

XML 配置文件中包含对MyBatis 系统的核心设置






    

        

            

            

                
                
                
                
            
        
    

    

        
    

  • 连接数据库中遇到的一些问题:The server time zone value ‘?й???’ is unrecognized or represents more than one time zone

原因: 使用了Mysql最新版驱动所以报错


解决方案:mysql> set global time_zone=’+8:00’;

  • JavaBean类 属性与关联数据库中的表中的列名要一致
package com.pojo;

public class User {
    private int id;
    private String name;
    private int password;
    private String sex;

    public User() {
    }

    public User(int id, String name, int password, String sex) {
        this.id = id;
        this.name = name;
        this.password = password;
        this.sex = sex;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPassword() {
        return password;
    }

    public void setPassword(int password) {
        this.password = password;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", password=" + password +
                ", sex='" + sex + ''' +
                '}';
    }
}

  • Mapper类-持久层接口(dao)

用来实现sql语句的一些操作
但此时借用Mapper.xml 来实现

public interface UserDao {
    List getUserList();
}
  • 映射配置文件 Mapper.xml





    

        select * from demo.user;
    

  • 工具类
public class MybatisUtils {

    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {

            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
//            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//            sqlSessionFactory = builder.build(inputStream);
//            合并如下。
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}
  • 实现类
public class UserDaoTest {
    //org.apache.ibatis.exceptions.PersistenceException:
    //单元测试
    @Test
    public void Test(){
        //SqlSession 提供了在数据库执行 SQL 命令所需的所有方法
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //创建dao接口的代理对象
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        List userList = mapper.getUserList();
        for (User user:userList){
            System.out.println(user);
        }
        sqlSession.close();
    }

}
CRUD 查增改删
  • mapper类
public interface UserDao {
    List getUserList();
//按id查询
    List getUserListId(int id);
//插入
    int insertUser(User user);
//修改
    int updateUser(User user);
//删除
    int deleteUser(int id);
}
  • 映射配置文件-mapper.xml



  
    
        select * from dmeo.user where id = #{id};
    
    
        insert into dmeo.user (id, name, password, sex) values (#{id},#{name},#{password},#{sex}) ;
    
    
        update dmeo.user set name = #{name},password = #{password} where id = #{id};
    
    
        delete from dmeo.user where id = #{id};
    

  • 实现类
public class UserDaoTest {
    //org.apache.ibatis.exceptions.PersistenceException:
    @Test
    public void Test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        List userList = mapper.getUserList();
        for (User user:userList){
            System.out.println(user);
        }
        sqlSession.close();
    }
    @Test
    public void Test1(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        List userList = mapper.getUserListId(1);
        for (User user:userList){
            System.out.println(user);
        }
        sqlSession.close();
    }

    @Test
    public void Test2(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        int i = mapper.insertUser(new User(2, "dd", 1234, "男"));
        if(i>0){
            System.out.println("ssss");
        }
//        提交事务 增加,修改,删除都要
        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public void Test3(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        mapper.updateUser(new User(2,"nn",123456,"nnn"));
        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public void Test4(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        mapper.deleteUser(2);
        sqlSession.commit();
        sqlSession.close();
    }
}
万能Map

假如实体类的属性,或数据库表中的字段过多,则应当使用Map

int addUser2(Map map);
  
        insert into dmeo.user (id) values (#{map的key}) ;
    
HashMap map = new HashMap<>();
map.put(key,value);
addUser2(map);
  • Map 传递参数,在sql中取key

parameterType=“map”

  • 对象传递参数,取对象属性

parameterType=“com.pojo.User”

  • 只有一个基本类型参数,直接取值,可以不用写参数类型

parameterType=“int”
###模糊查询

List getUserListLike(String value);

maven约定log4j的配置文件
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/424370.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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