一.MyBatis简介.
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
二.MyBatis快速入门.
1.在mevn库导入mybatis包和mysql包
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.1</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>6.0.6</version> </dependency>
2.在main文件夹下创建resources文件并标记为资源文件,在该文件夹下创建mybatis的配置文件(mybatis-config.xml).
XML 配置文件中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)。
<?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="dev"> <environment id="dev"> <!--配置事务管理器--> <transactionManager type="JDBC"/> <!--配置数据源的类型为链接池类型--> <dataSource type="POOLED"> <!--配置数据库--> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/zcy?serverTimezone=Asia/Shanghai"/> <property name="username" value="root"/> <property name="password" value="357159"/> </dataSource> </environment> </environments> </configuration>
3.加载mybatis配置文件.
从 SqlSessionFactory 中获取 SqlSession,SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 对象来直接执行已映射的 SQL 语句
public void init() throws IOException { //读取成输入流,注意为ibatis.io包下的 InputStream in = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
SqlSession session = sessionFactory.openSession();
}
4.创建一个接口,.通过这个接口连接数据库查询.
在项目的包下创建一个专门用来装接口的包mapper.
package com.lanou.demo.mapper; import com.lanou.demo.bean.OrderBean; import java.util.List; public interface OrderMapper { //查询所有 List<OrderBean> findAll(); List<OrderBean> findDetails(); }
5.创建实体类映射数据库的数据.
package com.lanou.demo.bean; import java.util.List; public class OrderBean { private Integer orderId; private String orderCode; private Integer userId; public Integer getOrderId() { return orderId; } public void setOrderId(Integer orderId) { this.orderId = orderId; } public String getOrderCode() { return orderCode; } public void setOrderCode(String orderCode) { this.orderCode = orderCode; } public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } }
6.资源文件夹下创建mapper的xml配置文件,这个文件相当于实现了上面接口的类,用来写sql语句.
注意:这个xml文件要跟接口在相同路径的包下,比如我的接口创建在java文件下的com.lanou.demo.mapper包下,
那么这个xml文件对应的路径为resources资源文件下的com.lanou.demo.mapper包下.这样编译后接口和xml文件才会在同一个路径下
在resources文件下创建包要用"/",创建文件夹,起名为:com/lanou/demo/mapper 创建后会自动变为包:com.lanou.demo.mapper
然后在mapper中创建对数据库操作的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"> <!--命名空间,当前的mapping文件的唯一标识-->
<!--namespace指明这是实现的接口的路径--> <mapper namespace="com.lanou.demo.mapper.OrderMapper">
<!--sql语句-->
<!--id是对应接口中的方法,名字要保持一致 resultType表示该sql语句返回的结果集类型,比如这里是OrderBean实体类类型-->
<select id="findAll" resultType="com.lanou.demo.bean.OrderBean">
select order_id,order_code,user_id,
us.user_id ,us.username
from tb_order
</select>
<!--如果接口方法中有参数,也就是按条件对数据库操作时
参数使用#{}的形式来获取
里面的变量名有规则:如果接口中的方法参数只有一个,并且类型都是值类型
那么这个名起什么都可以.
如果接口中传递的参数是一个对象,那么每一条属性都是一个参数
获取参数的时候,{}里面必须写的是属性的名字
-->
<select id="findOne" resultType="com.lanou.demo.bean.UserBean">
select * from user where uid = #{uid}
</select>
</mapper>
7.在mybatis-config.xml配置文件中引入mapper的配置文件.把下面代码添加到mybatis配置文件的<configuration>标签里
<!--引入所有的xml文件-->
<mappers> <!--引入方式--> <!-- <mapper class="com.lanou.demo.mapper.UserRepository"/>
--> <!--批量引入Mapper文件--> <package name="com.lanou.demo.mapper"/> </mappers>
8.通过 SqlSession 实例来直接执行已映射的 SQL 语句,通过接口得到一个接口的实例
public void init() throws IOException { //读取成输入流,注意为ibatis.io包下的 InputStream in = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in); //从 SqlSessionFactory 中获取 SqlSession, // SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。
SqlSession session = sessionFactory.openSession(); // 通过 SqlSession 实例来直接执行已映射的 SQL 语句
//通过接口得到一个接口的引用
OrderMapper orderMapper = session.getMapper(OrderMapper.class);
//调用口中的方法去xml文件中找到对应的sql语句
List<OrderBean> all = orderMapper.findAll(); }