mybatis 入门搭建
首先导包
依赖如下
<dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.15</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.1</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency></dependencies>
构建SqlSessionFactory
MyBatis应用是以SqlSessionFactory为中心的,实例可以通过SqlSessionFactoryBuilder获得.
其中SqlSessionFactory是工厂接口,任务用于创建SqlSession
配置文件将会解析配置XML文件在Configuration类对象中.
配置XML获取数据源,事务管理器,映射器
在resource文件下新建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><!-- 定义别名 --><typeAliases><typeAlias type="com.ming.Role" alias="role"/></typeAliases><!-- 定义数据库信息 --><environments default="development"><environment id="development"><!-- jdbc事物管理 --><transactionManager type="JDBC"></transactionManager><!-- 数据库链接信息 --><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://47.94.95.84:32786/mybatis"/><property name="username" value="mybatis"/><property name="password" value="ABCcba20170607"/></dataSource></environment></environments>
</configuration>
新建类
package com.ming;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;public class Role {public String getSqlSessionFactory(){String resource = "mybatis-config.xml";try {// 获得输入流InputStream inputStream;inputStream = Resources.getResourceAsStream(resource);// 获得SqlSessionFactory工厂SqlSessionFactory sqlSessionFactory = null;sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);}catch (IOException e){e.printStackTrace();}return null;}
}
最后新建测试类
package com.ming;import org.junit.After;
import org.junit.Before;
import org.junit.Test;public class RoleTest {private Role role = null;@Beforepublic void setUp() throws Exception {this.role = new Role();}@Afterpublic void tearDown() throws Exception {}@Testpublic void getSqlSessionFactory() {role.getSqlSessionFactory();}
}
此时的目录结构
代码方式构建
public SqlSessionFactory getSqlSessionFactory1(){// 创建数据库连接池PooledDataSource dataSource = new PooledDataSource();dataSource.setDriver("com.mysql.cj.jdbc.Driver");dataSource.setUrl("jdbc:mysql://47.94.95.84:32786/mybatis");dataSource.setUsername("mybatis");dataSource.setPassword("ABCcba20170607");// 构建数据库事物TransactionFactory transactionFactory = new JdbcTransactionFactory();// 创建数据库环境Environment environment = new Environment("development", transactionFactory, dataSource);// 构建Configuration对象Configuration configuration = new Configuration(environment);// 注册上下文别名configuration.getTypeAliasRegistry().registerAlias("role", Role.class);// 创建映射器SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);return sqlSessionFactory;}
书写测试用例如下
package com.ming;import org.junit.After;
import org.junit.Before;
import org.junit.Test;public class RoleTest {private Role role = null;@Beforepublic void setUp() throws Exception {this.role = new Role();}@Afterpublic void tearDown() throws Exception {}@Testpublic void getSqlSessionFactory() {role.getSqlSessionFactory();}@Testpublic void getSqlSessionFactory1() {role.getSqlSessionFactory1();}
}
创建SqlSession
SqlSession属于门面,通过SqlSession可以获得需要的什么信息
SqlSession sqlSession = null;try{// 创建一个sqlsession会话sqlSession = sqlSessionFactory.openSession();sqlSession.commit();}catch (Exception e){// 输出错误信息System.out.println(e.getMessage());// 进行事物操作,回滚数据库数据sqlSession.rollback();}finally {// 进行资源关闭if(sqlSession != null){sqlSession.close();}}
SqlSession作用,获取映射器,通过命名信息执行sql结果
映射器
映射器由java和xml文件共同组成,作用
定义参数类型
描述缓存
描述sql
定义查询结果和POJO映射关系
先给出java接口
package com.ming;public interface RoleMapper {public Role getRole(Long id);
}
根据给定的id获取角色对象
给出映射文件,然后在生成的时候会根据接口实现类,生成对象.
先编写POJO
package com.ming;// POJO
public class Role {private int id;private String roleName;private String note;public void setId(int id) {this.id = id;}public void setRoleName(String roleName) {this.roleName = roleName;}public void setNote(String note) {this.note = note;}public int getId() {return id;}public String getRoleName() {return roleName;}public String getNote() {return note;}
}
在编写映射配置文件
<?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.ming.RoleMapper"><!-- 定义的接口方法为getRole 类型参数为long 返回的结果为role 即之前定义在xml文件中定义的vo别名 --><select id="getRole" parameterType="int" resultType="role"><!-- 定义sql语句-->SELECT id, role_name as roleName, note FROM t_role WHERE id = #{id}</select>
</mapper>
最后编写mybatis,添加映射器配置文件
<?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><!-- 定义别名 --><typeAliases><typeAlias type="com.ming.Role" alias="role"/></typeAliases><!-- 定义数据库信息 --><environments default="development"><environment id="development"><!-- jdbc事物管理 --><transactionManager type="JDBC"></transactionManager><!-- 数据库链接信息 --><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://47.94.95.84:32786/mybatis"/><property name="username" value="mybatis"/><property name="password" value="ABCcba20170607"/></dataSource></environment></environments><!-- 定义映射器 --><mappers><mapper resource="RoleMapper.xml"></mapper></mappers>
</configuration>
最后再编写执行sql的类
package com.ming;
import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;import java.io.IOException;
import java.io.InputStream;public class MyBatis {public String getSqlSessionFactory(){String resource = "mybatis-config.xml";SqlSessionFactory sqlSessionFactory = null;try {// 获得输入流InputStream inputStream;inputStream = Resources.getResourceAsStream(resource);// 获得SqlSessionFactory工厂sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);}catch (IOException e){e.printStackTrace();}SqlSession sqlSession = null;try{// 创建一个sqlsession会话sqlSession = sqlSessionFactory.openSession();// 获得映射器// 接口传入映射器中RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);// 执行方法Role role = roleMapper.getRole(0);System.out.println(role.getRoleName());// 刷新语句并提交链接sqlSession.commit();}catch (Exception e){// 输出错误信息System.out.println(e.getMessage());// 进行事物操作,回滚数据库数据sqlSession.rollback();}finally {// 进行资源关闭if(sqlSession != null){sqlSession.close();}}return null;}public SqlSessionFactory getSqlSessionFactory1(){// 创建数据库连接池PooledDataSource dataSource = new PooledDataSource();dataSource.setDriver("com.mysql.cj.jdbc.Driver");dataSource.setUrl("jdbc:mysql://47.94.95.84:32786/mybatis");dataSource.setUsername("mybatis");dataSource.setPassword("ABCcba20170607");// 构建数据库事物TransactionFactory transactionFactory = new JdbcTransactionFactory();// 创建数据库环境Environment environment = new Environment("development", transactionFactory, dataSource);// 构建Configuration对象Configuration configuration = new Configuration(environment);// 注册上下文别名configuration.getTypeAliasRegistry().registerAlias("role", MyBatis.class);// 创建映射器SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);return sqlSessionFactory;}
}
最后编写测试类
package com.ming;import org.junit.After;
import org.junit.Before;
import org.junit.Test;public class MyBatisTest {private MyBatis myBatis = null;@Beforepublic void setUp() throws Exception {this.myBatis = new MyBatis();}@Afterpublic void tearDown() throws Exception {}@Testpublic void getSqlSessionFactory() {myBatis.getSqlSessionFactory();}@Testpublic void getSqlSessionFactory1() {myBatis.getSqlSessionFactory1();}
}
执行单元测试
结果如下
即完成了MyBatis的一次查询
注解
定义接口
package com.ming;import org.apache.ibatis.annotations.Select;public interface Role1 {@Select (value="SELECT id, role_name as roleName, note FROM t_role WHERE id = #{id}")public Role getRole(int id);
}
生命周期
SqlSessionFactoryBuilder
其是利用xml或者java编码构建SqlSessionFactory 可以构建多个SessionFactory 作用 构建器
根据构建器获得sqlSessionFactory
SqlSessionFactory
创建SqlSession 一个SqlSession相当于JDBC的Connection对象
此为单例管理
每创建一个SqlSession就会创建一个数据库连接
SqlSession
此为一个会话,相当于一个Connection连接 线程不安全
生命周期为一个应用的请求和操作,可以执行多条sql
mybatis 入门搭建相关推荐
- mybatis入门学习之环境的搭建——helloworld
Mybatis框架环境的搭建 首先,我是一名走java后端的大二菜鸟,我写博客一方面是用来记录我学习中遇到的问题,另一方面是希望和更多的人分享经验.如果我写的内容有不严谨的地方,还请大佬们纠正一下. ...
- spring mvc + mybatis 框架搭建 ( idea + gradle)
spring mvc + mybatis 框架搭建 idea + gradle 刚刚入门,只是个人见解,如有错误或者问题欢迎指出指正. 邮箱: [ wgh0807@qq.com ] 文章引用: [ap ...
- MyBatis1:MyBatis入门
MyBatis是什么 MyBatis是什么,MyBatis的jar包中有它的官方文档,文档是这么描述MyBatis的: MyBatis is a first class persistence fra ...
- MyBatis(1):MyBatis入门
MyBatis是什么 MyBatis是什么,MyBatis的jar包中有它的官方文档,文档是这么描述MyBatis的: MyBatis is a first class persistence fra ...
- MyBatis-学习笔记02【02.Mybatis入门案例】
Java后端 学习路线 笔记汇总表[黑马程序员] MyBatis-学习笔记01[01.Mybatis课程介绍及环境搭建][day01] MyBatis-学习笔记02[02.Mybatis入门案例] M ...
- mybatis入门基础(二)----原始dao的开发和mapper代理开发
阅读目录 一:原始dao开发方法 二:mapper代理方法(只需要mapper接口,相当于dao接口) 承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisS ...
- 【Mybatis入门20221024】
Mybatis入门20221024 一. 搭建环境 1.1 配置Mysql环境 1.2 配置Maven环境 二. 创建包`utils`的工具类`MybatisUtils` 三. 创建文件`resour ...
- 【Mybatis从入门到实战教程】第一章 Mybatis 入门
一.Mybatis 入门 1.1 什么是MyBatis MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了goo ...
- Mybatis学习笔记——Mybatis入门
文章目录 Mybatis入门 1.为什么要使用mybatis? 2.ORM 3.mybatis简介 4.mybatis框架 5.mybatis入门程序 5.1搭建环境 5.2 配置log4j 5.3 ...
最新文章
- vc++从txt文件中读取数据
- Servlet-forward转发
- 2021年新高考八省联考成绩查询辽宁,辽宁八省联考成绩什么时候出 辽宁八省联考成绩查询入口...
- 【NLP】基于深度学习的文本分类应用
- 写日历的程序员,你必须弄懂的中国农历算法。
- sqlite 事务处理 java_SQLite事务处理
- Linux -- 基于zookeeper的java api(二)
- eclipse在debug启动时无法启动解决办法
- Python学习入门基础教程(learning Python)--5.7 Python文件数据记录存储与处理
- 服务器配置文件设计,IM配置服务器概要的设计文件.doc
- java线程池的好处_Java 线程池的使用好处
- node中exports和module.exports的关系及使用
- 内网渗透-域管理员定位
- scratch案例——小游戏制作人物攻击、受伤动作篇
- GIS应用技巧之景观格局分析(三)
- HP 笔记本电脑 - 笔记本电脑睡眠后如何唤醒
- MiL.k x Bithumb x Yanolja宣布建立三方商务及市场营销合作关系
- 小程序底部兼容iphoneX
- CAD如何编辑多段线的顶点信息
- Android 8.0 华为手机 桌面应用图标显示圆形适配方案