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

MyBatis-----2、MyBatis框架搭建、核心配置文件详解、增删改查

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

MyBatis-----2、MyBatis框架搭建、核心配置文件详解、增删改查

1、搭建开发环境

首先新建一个空项目

对建立的项目进行配置JDK:

配置Maven环境:

2、创建Maven工程

建好Maven工程之后,在pom.xml中配置jar包依赖和打包方式(war/jar),代码如下:

    
    jar
    
        
        
            org.mybatis
            mybatis
            3.5.7
        
        
        
            junit
            junit
            4.12
            test
        
        
        
            mysql
            mysql-connector-java
            5.1.3
        
    
3、创建Mybatis配置文件

习惯上命名为mybatis-config.xml,这个文件名仅仅只是建议,并非强制要求。将来整合Spring之后,这个配置文件可以省略,所以大家操作时可以直接复制、粘贴。核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息

mybatis-config.xml:




    
    
        
        
            
            
            
            
                
                
                
                
            
        
    
    
    
        
    

4、创建mapper接口

MyBatis中的mapper接口相当于以前的dao。但是区别在于,mapper仅仅是接口,我们不需要提供实现类。

public interface UserMapper {

    
    
    int insertUser();
}
5、创建MyBatis的映射文件

相关概念:ORM(Object Relationship Mapping)对象关系映射。

  • 对象:Java的实体类对象
  • 关系:关系型数据库
  • 映射:二者之间的对应关系


类和表相对应、属性和字段相对应,对象和记录相对应

举个例子:
创建表t_user并添加相应字段

创建表对应的实体类

public class User {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private String sex;
    private String email;

    public User(Integer id, String username, String password, Integer age, String sex, String email) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.age = age;
        this.sex = sex;
        this.email = email;
    }

    public User() {
    }

    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

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

创建映射文件----对数据库增删改查的SQL语句在该映射文件中实现:




    
    
        insert into t_user values(null,'admin','123456','男',23,'12345@qq.com')
    

在mapper标签中包含namespace属性,namespace用于确定对应接口的路径信息,从而实现与接口的映射关系。注意两个一致:1、映射文件的namespace要和mapper接口的全类名保持一致; 2、映射文件中SQL语句的id要和mapper接口中的方法名一致

在映射文件的mapper中,包含多个子标签如select、insert、delete等,用于实现增删盖查的sql语句

mapper接口:

public interface UserMapper {

    
    
    int insertUser();
}

通过juint进行测试:

public class Mybatistest {
    @Test
    public void testMyBatis() throws IOException {
        //加载核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //获取SqlSessionFactoryBuilder
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //获取SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取mapper接口对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        //测试功能
        int result = mapper.insertUser();
        //由于在MyBatis配置文件中事务管理器设置的类型是JDBC,因此事务的提交和回滚都需要手动处理
        //提交事务
        sqlSession.commit();
        System.out.println("result:"+result);
    }
}
  • SqlSession:代表Java程序和数据库之间的会话。(HttpSession是Java程序和浏览器之间的会话)
  • SqlSessionFactory:是“生产”SqlSession的“工厂”。
  • 工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的相关代码封装到一个“工厂类”中,以后都使用这个工厂类来“生产”我们需要的对象。
6、添加log4j日志功能

1、在pom.xml引入jar包依赖

        
        
            log4j
            log4j
            1.2.17
        

2、加入log4j配置文件
log4j的配置文件名为log4j.xml,存放的位置是src/main/resources目录下




    
        
        
            
        
    
    
        
    
    
        
    
    
        
        
    

日志的级别:
FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)从左到右打印的内容越来越详细

7、增删盖查功能测试

接口:

public interface UserMapper {

    

    
    int insertUser();

    
    int updateUser();

    
    int deleteUser();

    
    User getUserById();

    
    List getAllUser();
    
}

映射文件:




    
    
        insert into t_user values(null,'admin','123456',23,'男','12345@qq.com')
    

    
    
        update t_user set username='张三' where id='4';
        update t_user set username='李四' where id='5';
    

    
    
        delete from t_user where id='7';
    

    
    
    
        select * from t_user;
    



测试代码:

public class Mybatistest {
    
    @Test
    public void testMyBatis() throws IOException {
        //加载核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //获取SqlSessionFactoryBuilder
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //获取SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //获取mapper接口对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        //测试功能
        int result = mapper.insertUser();
        //由于在MyBatis配置文件中事务管理器设置的类型是JDBC,因此事务的提交和回滚都需要手动处理
        //提交事务
        //sqlSession.commit();
        System.out.println("result:"+result);
    }

    @Test
    public void TestUpdate() throws IOException {
        //加载核心配置
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.updateUser();
    }

    @Test
    public void TestDelete() throws IOException {
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.deleteUser();
    }

    @Test
    public void TestgetUserById() throws IOException {
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//        User user = mapper.getUserById();
//        System.out.println(user);
        List list = mapper.getAllUser();
        list.forEach(user -> System.out.println(user));
    }
}

8、核心配置文件详解

Mybatis核心配置文件中标签必须按照以下顺序顺序:
properties?,settings?,typeAliases?,typeHandlers?,
objectFactory?,objectWrapperFactory?,reflectorFactory?,
plugins?,environments?,databaseIdProvider?,mappers?

1、使用properties文件存储数据库连接等可变信息,有助于后续的管理和维护。

在properties文件中以键值对的方式存储,在配置文件中需要使用properties中的值时,通过对应键即可获取,格式如下:‘${值所对应的键名称}’

以jdbc.properties文件为例,键值对如下:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://xxx:xxx/Mybatis?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false&allowMultiQueries=true
jdbc.username=root
jdbc.password=xxx

在Mybatis配置文件中使用jdbc.properties
1、声明引入jdbc.properties
2、使用jdbc.properties文件中的键值对信息

2、类型别名typeAliases标签:typeAlias子标签(用的少)、package子标签(常用)

类型别名主要用于简化映射文件中resultType的书写

typeAlias子标签:

在核心配置文件设置好类型别名后,即可在映射文件中直接使用别名。

package子标签:
package将制定包中的所有类按其类名将其设置为别名,且不区分大小写

    

        
        
    

配置文件中mappers标签用于引入映射文件,一个表对应一个映射文件。mappers标签中有两个子标签分别是mapper标签和package标签,mapper标签用与单个映射文件引入,package用于以包为单位引入映射文件。

    
        
        

    

以包为单位引入映射文件的两个要求:
1、mapper接口所在的包要和映射文件所在的包一致
2、mapper接口要和映射文件的名字一致
如图

在java包下可以以点(.)的形式建立多级目录,但在resources包下建立多级目录必须以斜杠(/)分隔开来建立多级目录,如果以点的形式进行建立则会建成一个文件夹而不是多级目录.

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

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

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