Mybatis框架从入门到放弃

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、Mybatis是什么?

用于java程序和数据库连接的 半自动、轻量级 的框架。

下载地址:(整片文章基于Mybatis3.4.1)
https://Github.com/mybatis/mybatis-3/

Mybatis官方介绍文档(中文版)
https://mybatis.org/mybatis-3/zh/index.html

二、使用步骤

1.导入jar包

	将jar包复制到src的lib(一般来说是没有这个文件夹的,需要自己新建)文件夹下,然后导入jar包

一个是Mybatis的jar包,一个是Mysql驱动

2.建立数据库和表

2.1 创建一个数据库名字为mybatis(可以不同但最好相同)
在这里插入图片描述
2.2 建立tbl_employee表,并在表中填入一条数据

在这里插入图片描述

在这里插入图片描述

3.新建包和类

在这里插入图片描述

									如上建包即可

4.新建与数据库表对应的类

	因为是员工表所以我的类名字为Employee
public class Employee {
    
    
    private Integer id;
    private String lastName;//这里的属性名和表中的列名不一样 
    private String email;
    private String gender;

    public Employee() {
    
    
    }

    public Employee(String lastName, String email, String gender) {
    
    
        this.lastName = lastName;
        this.email = email;
        this.gender = gender;
    }


    public Integer getId() {
    
    
        return id;
    }

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

    public String getLastName() {
    
    
        return lastName;
    }

    public void setLastName(String lastName) {
    
    
        this.lastName = lastName;
    }

    public String getEmail() {
    
    
        return email;
    }

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

    public String getGender() {
    
    
        return gender;
    }

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

    @Override
    public String toString() {
    
    
        return "Employee{" +
                "id=" + id +
                ", lastName='" + lastName + '\'' +
                ", email='" + email + '\'' +
                ", gender='" + gender + '\'' +
                '}';
    }

}

5.全局配置文件

根据官方文档的介绍全局配置文档的代码如下(在src下新建一个mybatis.xml文件) 下面的中文请改成自己的配置

全局配置文件的作用:获取数据库连接,<mapper>里面的地址先忽略,不需要进行更改
<?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://localhost:数据库端口号/数据库名"/>
        <property name="username" value="数据库的用户名"/>
        <property name="password" value="数据库的密码"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

6.新建SqlSessionFactory

按照文档所描述的,

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。

所以我们先建立一个。

String resource = "全局配置文件的路径";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

那么在我们知道如何建立SqlSessionFactory后,我们出现了1个问题
这段代码该写在哪里

在我们刚刚建的test包下新建一个test类

将代码写在里面,这里面的 .getResourceAsStream方法会有异常,选择throws或者try/catch都可以
在这里插入图片描述

7.获取SqlSession实例

该获取SqlSession实例了

SqlSession sqlSession = sqlSessionFactory.openSession();

在这里插入图片描述
我们发现SqlSession对象可以使用的方法有很多,几乎都是和数据库增删改查有关,下面我们选择.selectOne(),这个方法需要两个参数,第一个为执行sql语句的唯一标识符;第二个为执行sql要用的参数。

8.书写Sql映射文件

<?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">
<mapper namespace="com.xxxxx.mybatis.bean.EmployeeMapper">
<!--    namesapce:名称空间(可以随便起)
        id:唯一标识
        resultType:返回值类型
        #{id}:从传递过来的参数中取出id值
-->
    <select id="selectEmp" resultType="com.xxxx.mybatis.bean.Employee">
        select id,last_name lastName,email,gender from tbl_employee where id = #{id}
    </select>
    <!--
    这里的sql语句我们给last_name起了一个别名为lastName和java类中的名字一样
    -->
</mapper>

9.获取SqlSession的返回值,输出并关闭sqlSession

	 try {
    
    
            Employee employee = sqlSession.selectOne("com.xxx.mybatis.bean.EmployeeMapper.selectEmp", 1);
            System.out.println(employee);
        } finally {
    
    
            sqlSession.close();
        }

10.面向接口式编程

我们在配置完后可以发现,我们可以随意往数据库中传递参数,这肯定是不可以的,所以我们将对我们所写的代码进行改进。

10.1 新建一个接口

public interface EmployeeMapper {
    
    

    public Employee getEmpById(Integer id);

}

10.2 更改sql映射文件的内容
1) 将namespace改为接口的全类名
2) 将id改为接口中对应方法的名字

<mapper namespace="com.xxx.mybatis.dao.EmployeeMapper">
<!--    namesapce:名称空间;  指定为接口的全类名
        id:唯一标识;  将对应的方法的方法名和id对应,保证一样
        resultType:返回值类型
        #{id}:从传递过来的参数中取出id值

        public Employee getEmpById(Integer id);
-->
    <select id="getEmpById" resultType="com.huyichuan.mybatis.bean.Employee">
        select id,last_name lastName,email,gender from tbl_employee where id = #{id}
    </select>
</mapper>

10.3 在test类中新建方法,代码如下

@Test
    public void test01(){
    
    
        SqlSession sqlSession = null;

        try {
    
    
            //1.获取sqlsessionfactory对象
            InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
            SqlSessionFactory sqlsessionfactoty = new SqlSessionFactoryBuilder().build(resourceAsStream);

            //2.获取sqlSession对象
            sqlSession = sqlsessionfactoty.openSession();

            //3.获取接口的实现类对象
            //接口和xml绑定,mybatis会为接口自动创建一个代理对象,代理对象去执行增删改查方法
            EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);

            Employee empById = mapper.getEmpById(1);
            System.out.println(empById);

        } catch (IOException e) {
    
    
            e.printStackTrace();
        }finally {
    
    
            sqlSession.close();
        }
    }

三、进一步强化

1.全局配置文件

<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
在我们写xml配置文件的时候,我们一定会先写着一段代码
其中 http://mybatis.org/dtd/mybatis-3-config.dtd为xml文档的dtd约束文件,下载之后xml文件就会有提示

1.1 properties
mybatis可以使用properties来引入外部properties配置文件的内容
resource:引入类路径下的资源
url:引入网络路径或者磁盘路径下的资源
1.2 settings
settings包含了很多重要的设置项
setting:用来设置每一个设置项
name:设置项名
value:设置项取值

mapUnderscoreToCamelCase  默认为false,可设置为true
例:数据库中的列名为last_Name 对应 lastName ,则会自动匹配

1.3 typeAliases
typeAliases:别名处理器,可以为我们的java类型起别名
别名不区分大小写,还是写全类名比较好

    <typeAlias type="com.huyichuan.mybatis.bean.Employee" alias="emp"/>
		typeAlias:为某个java类型起别名
       		 type:指定要起别名的类型全类名;
        	 什么都不写的情况下默认别名就是类名小写:employee
        	 alias:指定新的别名




	<package name="com.huyichuan.mybatis.bean"/>
	    package:可以为某个包下的所有类批量起别名
        name:指定包名(当前包以及下面所有后代包的每一个类都起一个默认别名(类名小写))

		
		批量起别名的情况下,也可以使用@Alias注解为某个类型指定新的别名
        tips:直接写在类里,例子见如下图片

在这里插入图片描述

1.4 environments

       environments:环境们,mybatis可以配置多种环境
        	default 指定使用某种环境,可以达到快速切换环境
       	 	environment:配置一个具体的环境信息;
        			必须有两个标签;id代表当前环境的唯一标识
            			1)transactionManager:事务管理器
                		2)type:事务管理器的类型JDBC(JdbcTransactionFactory)| MANAGED(ManagedTransactionFactory)
                			最终方案:Spring
                			
                			自定义事务控制管理器,实现TransactionFactory接口,type指定为全类名dataSource:数据源;
                				type:数据源类型;
                				UNPOOLED(UnpooledDataSourceFactory)、
                                POOLED(PooledDataSourceFactory)、
                                JNDI(JndiDataSourceFactory)
                                
							自定义数据源:实现DataSourceFactory接口即可,type是数据源的全类名
							最终方案:Spring

1.5 databaseIdProvider

databaseIdProvider:支持多数据厂商;
    type="DB_WENDOR":VendorDatabaseIdProvider
        作用就是得到数据库厂商的标识(驱动自带):mybatis就能根据数据库厂商标识来执行不同的sql
        MySQL、Oracle、SQL Server,xxx
    <databaseIdProvider type="DB_WENDOR">
		<!--为不同的数据库厂商起别名-->
        <property name="MySQL" value="mysql"/>
        <property name="Oracle" value="oracle"/>
        <property name="SQL Server" value="sqlserver"/>
			<!--在sql映射文件中 数据库语句中标签中有一个属性为databaseId="xxxx"
            xxxx为数据库厂商的别名,意味着在xxx数据库环境下,使用xxx语句-->
    </databaseIdProvider>

sql映射文件:

<select id="getEmpById" resultType="emp" databaseId="mysql">
        select * from tbl_employee where id = #{id}
</select>

1.6 mappers
将sql映射注册到全局配置中

			mapper:注册一个sql映射
            注册配置文件
           		resource:应用类路径下的sql映射文件
            	url:应用网络路径或者磁盘路径下的sql映射文件
            注册接口
            	class:引用(注册)接口:
                	1、有sql映射文件,映射文件名必须和接口同名,并且放在与接口统一目录下;
                	2、没有sql映射文件,所有的sql都是利用注解写在接口上;
               	
               推荐:比较重要的、复杂的Dao接口我们来写sql映射文件
                     不重要的、简单的Dao接口为了开发快速可以使用注解
        <mapper resource="com/xxx/mybatis/dao/mapper.xml"/>
        <mapper class="com.xxx.mybatis.dao.EmployeeMapperAnnotation"/>


<!--        批量注册,name里面写包名;
            映射文件和接口放在同一个包下、同包名
-->
        <package name="com.xxx.mybatis.dao"/>

在Dao接口使用注解直接写sql语句,如下图所示
在这里插入图片描述

总结

猜你喜欢

转载自blog.csdn.net/weixin_44115637/article/details/109139437