流程
- 导入mybatis包
- 配置mybatis-config.xml文件
- 获取SqlSessionFactory对象
- 配置mapper映射文件
- 获取sqlSession对象,使用sqlSession对象进行数据库基本操作。
1.导入mybatis包
首先先从官网下载mybatis的jar包。
这里来是官网:http://mybatis.org
如果下的慢可以在这里下载:https://github.com/mybatis/mybatis-3/releases
将下载好的包导入到java项目中去。
这里用idea演示:
在idea找到File选项,选择Project Structure选项,在Project Settings设置中选择Libraries选项,再点击加号,选择Java选项,之后选择jar包路径。
如果你使用的maven项目,配置依赖即可:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
2.配置mybatis-config.xml文件
这里也可以不叫mybatis-config,根据自己的需求对文件名进行更改。<?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="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource=""/>
</mappers>
</configuration>
XML 配置文件中包含了对 MyBatis 系统的核心设置。不同的标签名,对应着不同的配置。
简单介绍常见的标签名的用法:
<configuration>
标签
配置信息全写在该标签内。
<enviroment>
标签
配置数据库的主要环境,驱动路径,数据库路径,数据库密码,用户名称等。
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--配置驱动路径-->
<property name="driver" value="${driver}"/>
<!--配置url路径-->
<property name="url" value="${url}"/>
<!--配置用户名字-->
<property name="username" value="${username}"/>
<!--配置数据库密码-->
<property name="password" value="${password}"/>
</dataSource>
</environment>
<properties>
标签
配置好的值可以在此文件中通过${键值}
来引用。
<properties >
<!--设置属性键值对(这个属性键值对是我自己取得名字非官方哈哈哈)-->
<property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="jdbc.url" value="jdbc:mysql://localhost:3306/day2?serverTimezone = GMT%2B8"/>
<property name="jdbc.username" value="root"/>
<property name="jdbc.password" value="xxxxxx"/>
</properties>
也可以使用html引用外部样式表一样,来引入键值对信息。
例如:
创建一个无后缀名的文件在文件中写入:
jdbc.driver = com.mysql.jdbc.Driver
jdbc.username = xxx
在通过
<properties resource="db.properties"><properties/>
的方式来引入。(这里的db.properties为自己所命名的文件名)
<setting>
标签
设置MyBatis的一些功能属性。
`````标签`
设置别名。
列如:
<typeAliases>
<typeAlias alias="stu" type="com.xxx.xxx.student"/>
</typeAliases>
设置student类的别名为stu,之后再mapper的映射文件中可以直接使用stu来应用student类。
<mappers>
标签
用于设置映射文件的路径,例如:
<mappers>
<mapper resource="com/xxx/xxx/xxx/StudentMapper.xml" />
<mapper class="com.xxx.xxx.mapper.StudentMapper"/>
</mappers>
3.获取SqlSessionFactory对象
String resource = "MyBatis-config.xml文件路径";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
这里使用InputStream输入流来引入配置文件,再通过Mybatis中的Resources
工具类来加载资源文件,获取sqlSessionFactory对象。
4.配置mapper映射文件
以学生表为例:
表名t_student
字段:id int
和sname varChar
创建pojo包,用来存放数据的实体对象。
创建student类,即student表中信息的实体类。
属性与字段的映射:
实体类的属性名需要和数据库中的字段名相同,如果不同,那么就无法将完成对应字段的映射,当然也可以使用数据库字段名取实体类属性名为别名的方式来完成映射。
例如:
public class Student {
private int id;
private String sname;
public void setSname(String sname) {
this.sname = sname;
}
public String getSname() {
return sname;
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
}
平常我们直接java连接数据库时都需要在java中写入sql语句,和一些其他数据库相关的配置信息,如果我们需要更改某个sql语句,或者修改数据库相关的配置时,可能会需要对代码进行大量的修改。
通过使用MyBatis,我们将sql语句,数据库中相关的配置信息,写入到映射文件和配置文件中,在做一些更改时将会节省我们大量的时间精力。
关于映射文件的内容编辑:
这里文件名为StudentMapper.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="student">
<select id="findStudentById" parameterType="int"
resultType="com.xxx.xxx.student">
select * from t_student where id = #{id}
</select>
<insert id="addStudent">
insert into t_student(sname,age) value (#{sname},#{age});
</insert>
<update id="updataSnameFindStudentById">
update t_student set sname = #{sname},age = #{age} where id = #{id};
</update>
</mapper>
resultType
属性
设置数据库的实体与java中你想要映射的对象。
resultMap
属性
通过使用resultMap的方式进行设置字段与java对象之间的映射。
例如:
<resultMap id ="xxx" type="Student">
<id property = "id" column = "id"></id>
<result property = "sname" column = "name"></result>
<result property = "age" column = "age"></result>
</resultMap>
<select id="findStudentById" parameterType="int" resultMap="xxx">
select * from t_student where id = #{id}
</select>
id标签用于设置主键的映射关系。
而result则是用来设置其他字段名的映射关系。
column属性为字段名,property属性为字段名所映射的java对象的属性名。
使用resultMap属性来解决多对一的映射关系。(例如:班级表,学生表,查询学生所在班级,此时为多对一,很多学有着相同的班级)
学生实体类要创建Class(这里指班级对象)。
使用<association>
标签
<association>
内为所关联的表的字段的映射关系。
例如:
<resultMap id ="xxx" type="Student">
<id property = "id" column = "id"></id>
<result property = "sname" column = "name"></result>
<result property = "classid" column = "classid"></result>
<association property="class" javaType = "Class这里写类的路径">
<id property = "id" column = "id"></id>
<result property = "cname" column = "name"></result>
</association>
</resultMap>
<select id="allStudentClass" resultMap="xxx">
select t.*,c.* from t_student t left join c_class c on t.classid = c.id
</select>
namespace
属性
命名sql语句的引用前缀。
使用resultMap属性来解决一对多的映射关系。(例如:班级表,学生表,班级有多少学生,此时为一对多,一个班级对应多个学生)
班级对象要创建有List<studentt>
对象。List<student> students
<resultMap id ="xxx" type="Class">
<id property = "id" column = "id"></id>
<result property = "cname" column = "name"></result>
<collection property="students" ofType = "student">
<id property = "id" column = "id"></id>
<result property = "sname" column = "name"></result>
<!--<result property = "classid" column = "classid"></result>-->
</collection>
</resultMap>
<select id="allClassStudent" resultMap="xxx">
select * from t_student t right join c_class c on c.id = s.id where c.id = #{id}
</select>
ofType为设置集合中的类型。
结合<association>
与<collection>
标签可以实现多多对多连接。
select
标签
填写DQL语句。
id属性:设置该条SQL语句的名字
parameterType属性:设置java所输入的查询条件的类型
resultType:设置查询结果返回的实体类类型(可以写之前的别名)
insert
标签:
填写DML语句。
id属性:设置该条SQL语句的名字
delelte
标签:???
填写DDL语句。删除语句
id属性:设置该条SQL语句的名字
在Mybatis-config.xml的<mapper>
标签中设置好改文件的路径
例如:
<mappers>
<mapper resource="com/zhoujian/mapper/StudentMapper.xml" />
</mappers>
5.获取sqlSession对象,使用sqlSession对象进行数据库基本操作
获取SqlSession实例对象。
SqlSession sqlSession = sqlSessionFactory.openSession();
执行查询语句:
Student stu = sqlSession.selectOne("student.findStudentById", 1);
执行DML:
sqlSession.update("student.updataSnameFindStudentById",stu2);
sqlSession.commit();
需要提交。
或者通过实现接口来执行SQL语句
创建接口StudentMapper.class(需要和映射文件保持相同的名字)
映射文件中的name属性要为对应的Mapper类的包路径例如:"com.xxx.xxx.mapper.StudentMappper"
public interface StudentMapper {
Student findStudentById(Integer Id);
Integer addStudent();
Integer updataSnameFindStudentById();
}
如果Mapper文件与对应的SQL映射文件的文件名相同且在同一个文件夹中,那么可以使用包扫描的方式简化SQL映射文件的修改。
<mappers>
<package name = "com.xxx.xxx.mapper">
</mappers>
通过接口实现类来,执行SQL语句。
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
Student stu1 = studentMapper.findStudentById(1);