Mybatis(一)入门
mybatis使用的三个部分
数据查询主体 : SqlSession
查询映射层 : Mapper接口
数据维护层 : Bean 设计
一、添加maven依赖
<!-- mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!-- mysql依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
二、添加mybatis配置文件
1、基本配置
<?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:开发模式
work:工作模式
default="development",id="development",两个的属性值必须一致
-->
<!--配置环境-->
<environments default="development">
<!--配置mysql的环境-->
<environment id="development">
<!--配置事务的类型-->
<transactionManager type="JDBC"/>
<!--配置数据源(连接池)-->
<dataSource type="POOLED">
<!--配置连接数据库的4个基本信息-->
<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="lxn123"/>
</dataSource>
</environment>
</environments>
<!-- 在配置文件中 关联包下的 接口类-->
<!-- 注册Mapper(映射)文件 -->
<mappers>
<mapper class="com.atguigu.mybatis.test3.UserMapper"/>
</mappers>
</configuration>
在<mappers>中有两个子元素 1.<package> 2.<mapper>
mappers 标签下有许多 mapper 标签,每一个 mapper 标签中配置的都是一个独立的映射配置文件的路径,配置方式有以下几种。
第一种:使用相对路径进行配置。示例代码如下:
这种方式不用保证同接口同包同名
<mappers>
<mapper resource="org/mybatis/mappers/UserMapper.xml"/>
<mapper resource="org/mybatis/mappers/ProductMapper.xml"/>
<mapper resource="org/mybatis/mappers/ManagerMapper.xml"/>
</mappers>
第二种:使用绝对路径引入进行配置。示例代码如下:
<mapper url="文件路径名">
<mappers>
<mapper url="file:///var/mappers/UserMapper.xml"/>
<mapper url="file:///var/mappers/ProductMapper.xml"/>
<mapper url="file:///var/mappers/ManagerMapper.xml"/>
</mappers>
第三种:使用接口类注册引入进行配置。示例代码如下:
<mapper class="接口路径">
保证接口名(例如IUserDao)和xml名(IUserDao.xml)相同,还必须在同一个包中。
例如:<mapper class="cn.sdut.dao.IPersonDao"/>
<mappers>
<mapper class="org.mybatis.mappers.UserMapper"/>
<mapper class="org.mybatis.mappers.ProductMapper"/>
<mapper class="org.mybatis.mappers.ManagerMapper"/>
</mappers>
但是对于接口方法使用注解方式来说,使用这种方式没有xml文件都可以,更别提同包同名什么的限制条件了。
第四种:使用接口所在包名引入进行配置。示例如下:
<package name="映射文件所在包名">
这种引入方式相当于批量引入一个包下的所有映射器
注意:这种方式必须保证接口名(例如IUserDao)和xml名(IUserDao.xml)相同,还必须在同一个包中。
<package name="cn.sdut.dao"/>
<mappers>
<package name="org.mybatis.mappers"/>
</mappers>
2、进阶配置
configuration 包裹所有配置标签,是整个配置文件的顶级标签
properties 属性,该标签可以引入外部配置的属性,也可以自己配置。该配置标签所在的同一个配置文件中的其他配置均可引用此配置中的属性
setting 全局配置参数,用来配置一些改变运行时行为的信息,例如是否使用缓存机制,是否使用延迟加载,是否使用错误处理机制等。并且可以设置最大并发请求数量、最大并发事务数量,以及是否启用命令空间等
typeAliases 类型别名,用来设置一些别名来代替 Java 的长类型声明,如 java.lang.int 变为 int,减少配置编码的冗余
typeHandlers 类型处理器,将 sql 中返回的数据库类型转换为相应 Java 类型的处理器配置
objectFactory 对象工厂,实例化目标类的工厂类配置
plugins 插件,可以通过插件修改 MyBatis 的核心行为,例如对语句执行的某一点进行拦截调用。
environments 环境集合属性对象,数据库环境信息的集合。在一个配置文件中,可以有多种数据库环境集合,这样使 MyBatis 将 sql 同时映射至多个数据库
environment 环境子属性对象,数据库环境配置的详细配置
transactionManager 事务管理,指定 MyBatis 的事务管理器
dataSource 数据源,使其中的 type 指定数据源的连接类型,在标签对中可以使用 property 属性指定数据库连接池的其他信息
mappers 映射器,配置 sql 映射文件的位置,告知 MyBatis 去哪里加载 sql 映射配置
<?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>
<!-- 1.properties属性引入外部配置文件 -->
<properties resource="org/mybatis/example/config.properties">
<!-- property里面的属性全局均可使用 -->
<property name="username" value="root"/>
<property name="password" value="root"/>
</properties>
<!-- 2.全局配置参数 -->
<settings>
<!-- 设置是否启用缓存 -->
<setting name="cacheEnabled" value="true"/>
<!-- 设置是否启用懒加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
<!-- 3.别名设置 -->
<typeAliases>
<typeAlias alias="student" type="cn.com.mybatis.student"/>
<typeAlias alias="teacher" type="cn.com.mybatis.teacher"/>
<typeAlias alias="integer" type="java.lang.Integer"/>
</typeAliases>
<!-- 4.类型转换器 -->
<typeHandlers>
<!-- 一个简单类型转换器 -->
<typeHandler handler="org.mybatis.example.ExampleTypeHandler"/>
</typeHandlers>
<!-- 5.对象工厂 -->
<objectFactory type="org.mybatis.example.ExampleObjectFactory">
<!-- 对象工厂注入的参数 -->
<property name="someProperty" value="100"/>
</objectFactory>
<!-- 6.插件 -->
<plugins>
<plugin interceptor="org.mybatis.example.ExamplePlugin">
<property name="someProperty" value="100"/>
</plugin>
</plugins>
<!-- 7.environments数据库环境配置 -->
<!-- 和Spring整合后environments配置将被废除 -->
<environments default="development">
<environment id="development">
<!-- 使用JDBC事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<mapper resource="sqlmap/UserMapper.xml"/>
<mapper resource="sqlmap/OtherMapper,.xml"/>
</mappers>
</configuration>
三、创建接口和实体类,定义查询方法
接口
public interface IStudentDao {
/**
* 查询所有操作。(只需要接口,不需要实现类)
* @return
*/
List<Student> findAll();
}
实体类
public class Student implements Serializable {
private int sid;
private String sname;
private String sex;
private Date birthday;
private int cno;
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
......
//自己实现其他的get set方法,这里省略
}
四、创建对应的xml映射文件(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">
<mapper namespace="com.stevensam.dao.IStudentDao">
<!--配置查询所有学生的方法-->
<select id="findAll" resultType="com.stevensam.domain.Student">
SELECT * FROM student;
</select>
</mapper>
MyBatis自动映射功能:
1、首先通过接口中的方法名与sql查询语句进行关联
2、当查询到的字段与pojo中的字段完全对应的时候,就会将查询结果自动映射成一个pojo对象
3、如果数据库字段和类字段不一致,则需要进行转换,所以一般设计数据库的时候,字段采用驼峰式
五、创建测试类
public class UserMapperTest {
@Test
//获取所有数据
public void testGetAllUsers(){
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.工厂生产SqlSession对象
SqlSession session = factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
IStudentDao mapper = session.getMapper(IStudentDao.class);
//5.使用代理对象执行方法
List<Student> studentList = mapper.findAll();
for (Student stu:studentList) {
System.out.println(stu);
}
//6.释放资源
session.close();
in.close();
}
}
---------------------
Mybatis(一)入门的更多相关文章
- MyBatis学习总结(一)——MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- MyBatis学习总结(一)——MyBatis快速入门(转载)
本文转载自http://www.cnblogs.com/jpf-java/p/6013537.html MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了 ...
- MyBatis入门学习教程-MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- MyBatis学习总结(一)——MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- 【转】MyBatis学习总结(一)——MyBatis快速入门
[转]MyBatis学习总结(一)——MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC ...
- mybatis快速入门(六)
前面mybatis的入门程序基本上都写完了,就看大家的灵活运用了,今天来吧前面的整合一下封装一个公共的BaseDao 只需要把前面的改造下然后创建一个BaseDao的接口,其它的继承BaseDao接口 ...
- MyBatis学习总结-MyBatis快速入门的系列教程
MyBatis学习总结-MyBatis快速入门的系列教程 [MyBatis]MyBatis 使用教程 [MyBatis]MyBatis XML配置 [MyBatis]MyBatis XML映射文件 [ ...
- MyBatis基础入门《二十》动态SQL(foreach)
MyBatis基础入门<二十>动态SQL(foreach) 1. 迭代一个集合,通常用于in条件 2. 属性 > item > index > collection : ...
- MyBatis基础入门《十九》动态SQL(set,trim)
MyBatis基础入门<十九>动态SQL(set,trim) 描述: 1. 问题 : 更新用户表数据时,若某个参数为null时,会导致更新错误 2. 分析: 正确结果: 若某个参数为nul ...
随机推荐
- SPOJ:NO GCD (求集合&秒啊)
You are given N(1<=N<=100000) integers. Each integer is square free(meaning it has no divisor ...
- Code:NFine框架
ylbtech-Code:NFine框架 1.返回顶部 1. 2. 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出 ...
- 禁用选择文本功能user-select
有时候,我们为了用户体验,需要禁用选择文本功能. 这需要用到一个CSS属性:user-select,user-select的文档点这里 user-select有两个值:none:用户不能选择文本tex ...
- windows下patch
经常在网上看到有人发布patch文件来更新他们的开源代码,例如cegui.ogre等都使用这种形式来修bug或者增加一些小功能.但是,我们下载到的patch文件,貌似是linux/unix的diff工 ...
- 清理c盘的文件
C:/Users/用户名/AppData里面默认有三个文件夹,分别是Local,LocalLow,Roaming,简单地来说,都是用来存放软件的配置文件和临时文件的,里面有很多以软件公司或者软件名称命 ...
- Spring Cloud Alibaba基础教程:Sentinel Dashboard中修改规则同步到Nacos
上一篇我们介绍了如何通过改造Sentinel Dashboard来实现修改规则之后自动同步到Apollo.下面通过这篇,详细介绍当使用Nacos作为配置中心之后,如何实现Sentinel Dashbo ...
- rn滑动返回页面监听
开发rn的同学都已经知道这个问题很坑了,真的很难弄,网上的方法尝试过很多,返回的的时候回调,是用的最多的,最开始我也是用的这种方式,但是滑动返回的时候监听不到.并且用起来也比较麻烦,不但需要在当前页面 ...
- robotframework自动化系列:文本类型的下拉框
对于下拉框定位和输入,这里主要遇到有两种类型的下拉选择. 其中一个类型是select-options格式,如图 这种方式的定位可以使用select from list by value或select ...
- 树的直径初探+Luogu P3629 [APIO2010]巡逻【树的直径】By cellur925
题目传送门 我们先来介绍一个概念:树的直径. 树的直径:树中最远的两个节点间的距离.(树的最长链)树的直径有两种方法,都是$O(N)$. 第一种:两遍bfs/dfs(这里写的是两遍bfs) 从任意一个 ...
- jsp 接收汉字参数乱码
这两天跟汉字问题较上劲了,真是考验基本功 1. ${param.userName} 乱码 解决方法: <%String name = (String)request.getParameter( ...