0
点赞
收藏
分享

微信扫一扫

MyBatis的配置

星巢文化 2022-02-14 阅读 64

Mybatis简介

是一款优秀的持久层框架,用于简化JDBC开发

持久层就是负责将数据保存到数据库的那一层代码

JavaEE三层结构:表现层,业务层,持久层

框架:

就是一个半成品软件,是一套可重用、通用的,软件基础代码模型

能使构建软件更加高效、规范、通用、可扩展


JDBC的缺点

1.硬编码:

  • 注册驱动,获取连接

  • SQL语句

2.操作繁琐:

  • 手动设置参数

  • 手动封装结果集

MyBatis对于JDBC的简化

硬编码→配置文件

注册驱动:MyBatis-config.xml

SQL语句:UserMapper.xml中写SQL语句

操作繁琐→自动完成

MyBatis执行类里面调用sqlSession.xxx方法,给定参数就能查询出结果,然后自动封装为对应的对象,例如User

List<User> users = sqlSession.selectList("test.selectAll");

MyBatis快速入门

查询user表中所有数据步骤简介

  1. 创建user表,添加数据
  2. 创建模块,导入坐标
  3. 编写MyBatis核心配置文件- - - >替换连接信息,解决硬编码问题
  4. 编写SQL映射文件- - - >统一管理SQL语句,解决硬编码问题
  5. 编码:
  • 定义POJO类 对应user表

  • 加载核心配置文件,获取sqlSessionFactory对象

  • 获取SqlSession对象执行Sql语句

  • 释放资源

开始操作:

1.创建数据库并创建tb_user

create database mybatis;
use mybatis;

drop table if exists tb_user;

create table tb_user(
	id int primary key auto_increment,
	username varchar(20),
	password varchar(20),
	gender char(1),
	addr varchar(30)
);
INSERT INTO tb_user VALUES (1, 'zhangsan', '123', '男', '北京');
INSERT INTO tb_user VALUES (2, '李四', '234', '女', '天津');
INSERT INTO tb_user VALUES (3, '王五', '11', '男', '西安');

2.创建模块,导入坐标:

new Modules创建maven项目;

在pom.xml中导入坐标

  <!--导入依赖-->
   <dependencies>
        <!--导入mybatis依赖-->
       <dependency>
           <groupId>org.mybatis</groupId>
           <artifactId>mybatis</artifactId>
           <version>3.5.5</version>
       </dependency>

        <!--导入数据库驱动-->
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <version>5.1.29</version>
       </dependency>

        <!--junit单元测试-->
       <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>4.13</version>
           <scope>test</scope>
       </dependency>

        <!-- 添加slf4j日志api -->
       <dependency>
           <groupId>org.slf4j</groupId>
           <artifactId>slf4j-api</artifactId>
           <version>1.7.20</version>
       </dependency>
        <!-- 添加logback-classic依赖 -->
       <dependency>
           <groupId>ch.qos.logback</groupId>
           <artifactId>logback-classic</artifactId>
           <version>1.2.3</version>
       </dependency>
         <!-- 添加logback-core依赖 -->
       <dependency>
           <groupId>ch.qos.logback</groupId>
           <artifactId>logback-core</artifactId>
           <version>1.2.3</version>
       </dependency>
   </dependencies>

在写完导入logback的代码以后,需要将logback.xml配置文件放到对应的resources里面去

3.编写MyBatis核心配置文件

在resources里面创建一个mybatis的核心配置文件mybatis-config.xml 名字自己取

在mybatis-config.xml 写:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
            
<!--数据库连接信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>

            </dataSource>
        </environment>
    </environments>

<!--加载Sql映射文件-->
    <mappers>  //指定当前mapper映射文件的路径,若在平级直接写文件名即可
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

4.编写Sql映射文件

取名规范***表名Mapper.xml***,例如:

UserMapper.xml或者OrderMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--namespace:名称空间-->
<mapper namespace="test">

<!--   
id是Sql语句的唯一标识,不能重复     
resultType是返回结果的类型,将来要包装成什么就写什么
例如我要封装为user类,那就写上创建一个uer类,然后在此处写上user类的目录
-->
    <select id="selectAll" resultType="com.study.pojo.User">
        select * from tb_user;
    </select>

</mapper>

5.编码

  • 定义POJO类:创建user实体类

package com.study.pojo;

public class User {
            private Integer  id         ;
            private String   username   ;
            private String   password   ;
            private String   gender     ;
            private String   addr       ;

            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 String getGender() {
                return gender;
            }

            public void setGender(String gender) {
                this.gender = gender;
            }

            public String getAddr() {
                return addr;
            }

            public void setAddr(String addr) {
                this.addr = addr;
            }

            @Override
            public String toString() {
                return "User{" +
                        "id=" + id +
                        ", username='" + username + '\'' +
                        ", password='" + password + '\'' +
                        ", gender='" + gender + '\'' +
                        ", addr='" + addr + '\'' +
                        '}';
            }

        }




  • 编写MyBatis核心测试类 MybatisDemo

package com.study;

import com.study.pojo.User;
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 java.io.InputStream;
import java.io.IOException;
import java.util.List;

//mybatis的快速入门
public class MybatisDemo {
    public static void main(String[] args) throws IOException {
//加载mybatis核心文件配置,获取sqlSessionFactory对象
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//需要导包并抛出异常
//获取sqlSession对象,用它来执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();
//查询所有用selectAll,查询一个用selectOne
//执行sql,返回List集合
        List<User> users = sqlSession.selectList("test.selectAll");
//输出结果
        System.out.println(users);
//释放资源
        sqlSession.close();

    }
}

输出:

[User{id=1, username='zhangsan', password='123', gender='男', addr='北京'}, User{id=2, username='李四', password='234', gender='女', addr='天津'}, User{id=3, username='王五', password='11', gender='男', addr='西安'}]

完成


MyBatis代理开发

目的

  • 就是解决原生mybatis中仍然存在的硬编码的问题:
  • 简化后期SQL

原生:

   //执行sql,返回List集合
        List<User> users = sqlSession.selectList("test.selectAll");

mapper代理开发:

//获取接口代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class)
//执行方法,其实就是执行SQL语句,userMapper中的方法和userMapper中定义的是能对应上的
List<User> users = userMapper.selectAll();

使用步骤

1.定义接口

定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下

  • 在pojo的同级目录下新建mapper的包,在包里面新建与映射文件同名的接口:userMapper

  • 在resources处new一个Directory,命名为UserMapper.xml,例如:

com/study/mapper这里要格外注意,不能用点,只能用***斜杠***

然后将resources中的UserMapper.xml文件移到改文件夹里面去

2.命名

设置SQL映射文件的namespace属性为Mapper接口全限定名

<mapper namespace="com.study.mapper.userMapper">

3.定义方法

在Mapper接口中定义方法,方法名就是SQL映射文件中SQL语句的ID,并保持参数类型和返回值类型一致

public interface userMapper {
            List<User> selectAll();
//SQL语句中是查询所有,所以返回的是很多个User,一个用List,里面存放一个一个的User
}

4.更改目录

完成这些以后,mybatis-config.xml文件中的mapper resource也需要更改,跟改为移动后的目录:

​ “Copy Path - Path From Source Root”

<mapper resource="com/study/mapper/userMapper.xml"/>

5.编码

  • 通过sqlSession的getMapper方法获取Mapper接口的代理对象
 //3.1获取userMapper接口的代理对象
userMapper mapper = sqlSession.getMapper(userMapper.class);
  • 调用对应方法完成sql的执行

  • List<User> userList = mapper.selectAll();
    

    尽管这样,当mapper文件过多时,此方式还是需要一个一个的写上xml文件的路径,这就很费时,此时,只要我们遵守了MyBatis的相关规则,就能使用一个更简化的方法:“包扫描”

    在mybatis-config文件中:

        <mappers>
            <!--加载Sql映射文件-->
    <!--
    <mapper resource="com/study/mapper/userMapper.xml"/>
    mapper代理方式
    -->
          
            <package name="com.study.mapper"/>
    这样写就明确的指明了mapper文件的存放目录,就回去扫描并加载,以后不管存在多少个,一行代码搞定
      
      </mappers>
    

MyBatis核心文件配置

环境配置(envirouments)

  • 类起别名(typeAliases)

mybatis-config.xml

 <typeAliases>
        <package name="com.study.pojo"/>
<!--意思是给pojo下的所有实体类起了一个别名,这个别名就是类名不区分大小写了,
也不用带包的名称,这样在写返回值类型世界就能直接写user-->
    </typeAliases>

userMapper.xml:

<select id="selectAll" resultType="user">
返回值类型中就不用写包名,直接写上别名就可以了

对于基本数据类型而言,会自动配置别名,这样在写返回值类型时就不用区分大小写

顶层结构

configuration(配置)

1.propeties(属性)

2.settings(设置)

3.typeAliases(类型别名)

4.typeHandlers(类型处理器)

5.objectFactory(对象工厂)

6.plugins(插件)

7.envirouments(环境配置)

​ enviroument(环境变量)

​ transaction(事务管理器)

​ dataSource(数据源)

8.databaseProvider(数据库厂商标识)

9.mapper(映射器)

在配置各个标签时,需要遵循前后顺序

比如常用的typeAliases就必须放在mapper前面,否则就会报错

举报

相关推荐

0 条评论