Mybatis简介及入门
mybatis简介
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
mybatis操作对比
操作数据库:JDBC——>DbUtils(QueryRunner)——>jdbcTemplate:小工具
框架:整体解决方案
jdbc处理流程:
功能简单,sql写在Java代码里——>硬编码,高耦合
Hibernate:全自动ORM(Object Relation Mapping)框架:目的在于消除sql,没法操作sql(希望把sql语句交给开发人员)
Mybatis: 半自动框架,轻量级的,sql与编码分离,sql是开发人员控制
mybatis之Helloworld
按照官方文档
1、新建实体类
2、maven依赖
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency>
3、全局配置信息mybatis-config
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE configuration PUBLIC "-//mapper.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--配置mybatis运行环境--> <environments default="development"> <environment id="development"> <!--type=“JDBC”代表使用JDBC的提交和回滚来管理事务--> <transactionManager type="JDBC"/> <!--mybatis提供了3种数据源类型,分别是POOLED、UNPOOLED、JNDI--> <!--POOLED表示支持JDBC数据源连接池--> <!--UNPOOLED表示不支持数据源连接池--> <!--JNDI表示支持外部数据源连接池--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!--注册Mapper映射文件方式--> <!--将sql映射文件注册到全局配置文件中--> <mappers> <!--注册方式1,一个一个的配置--> <mapper resource="mapper/EmployMapper.xml"/> <!--注册方式2,自动包内的mapper接口与配置文件--> <!--<package name="mapper"/>--> </mappers> </configuration>
4、测试
1)根据xml全局配置文件获得sqlSessionFactoty
2)获得sqlSession对象
3)执行sql
4)关闭sqlSession
package test; import bean.Employee; 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 org.testng.annotations.Test; import java.io.IOException; import java.io.Reader; /** * @author chenpeng * @date 2018/5/16 11:40 */ public class MybatisTest { @Test public void test() throws IOException { /** * 1、根据xml配置文件(全局配置文件),创建一个sqlSessionFactory对象 */ String resource = "mybatis-config.xml"; Reader reader = Resources.getResourceAsReader(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); //2、获取sqlSession实例,能直接执行已经映射的sql语句 SqlSession sqlSession = sqlSessionFactory.openSession(); try { //3、两个参数分别是唯一标识和要传入的参数 Employee employee = sqlSession.selectOne("select",1); System.out.println(employee); } finally { //4、关闭sqlSession sqlSession.close(); } } }
5、创建映射的sql文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE mapper PUBLIC "-//mapper.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="Employee"> <!--namespace:名称空间 id:唯一标识 resultType:返回值类型 #{id}:标识从传过来的参数中取出id --> <select id="select" resultType="bean.Employee"> SELECT * FROM t_employee WHERE id = #{id} </select> </mapper>
然而报错了:
目录结构:
在pom中配置:
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build>
参考:https://blog.csdn.net/qq_23184291/article/details/78089115
mybatis接口式编程
接口式编程需要新建一个dao类:
public interface EmployeeMapper { EmployeeMapper getEmployeeById(Integer id ); }
mapper映射文件的变化:
namespace内容变为接口的路径,唯一标识符变为接口的方法名
@Test public void test1() throws IOException { //获取sqlSession对象 SqlSession sqlSession = getSession(); try { //获取接口的实现类 //为接口创建一个代理对象mapper EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class); Employee employee = mapper.getEmployeeById(1); System.out.println(employee); } finally { //关闭sqlSession对象 sqlSession.close(); }通过getMapper方法获得口类的代理对象,从而调用接口的方法。
小结:
1、推荐使用接口式编程:
2、SqlSession代表和数据库一次会话,用完必须关闭
3、SqlSession和connection一样都是非线程安全的,每次使用都应该获取新的对象,不要放在共享成员变量。
4、mapper接口没有实现类,但是mybatis会生成一个代理对象。(将接口和xml映射文件进行绑定)
EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
5、两个重要的配置文件:
mybatis全局配置文件:包含数据库连接池信息,事务管理等信息,系统运行环境
sql映射文件:保存了每一个sql语句的映射信息。