一、创建maven工程
1.1、创建工程
可以创建一个空白的工程用来存放实验项目
1.2、创建maven模块
1.3、设置打包方式
在pom.xml文件中加入下述代码
<!-- 打包方式 -->
<packaging>jar</packaging>
1.4、引入依赖
实验中主要使用到MyBatis、junit测试、MySQL驱动,因此需要在pom.xml文件中加入下述依赖
<dependencies>
<!-- Mybatis核心 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.3</version>
</dependency>
</dependencies>
二、创建MyBatis的核心配置文件
- 该核心配置文件习惯上命名为
mybatis-config.xml
。 - 该文件在整合Spring之后,可以省略。
- 该文件的主要作用是配置链接数据库的环境以及MyBatis的全局配置信息
- 该文件的存放位置是
src/main/resources
目录下
在官方文档中,该文件的内容如下
<?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="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
通过更改后的配置文件内容如下:
<?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="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>
<!--引入映射文件-->
<mappers>
<!--resource中的值需要与UserMapper.xml文件对应-->
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
2.1、文件中标签的顺序
- 在该文件中添加标签,需要按照以下顺序排序,否则就会报错。
- 在实际使用过程中,如果忘记顺序,可以现在文件中任意位置添加标签,当报错后,把鼠标放在报错处,就会出现标签顺序的提示信息
MyBatis核心配置文件中,标签的顺序
properties?,settings?,typeAliases?,typeHandlers?,
objectFactory?,objectWrapperFactory?,reflectorFactory?,
plugins?,environments?,databaseIdProvider?,mappers?)".
下图是官方文档中列出的排列顺序(上述的图片版)
2.2、各标签的含义
所有标签的含有在官方文档的Configuration XML
中都可以找到,此处只把上述配置文件中出现的标签进行简单的介绍
- environments(配置链接数据库的环境):因为可以添加多个链接数据库的环境,因此其内部的
environment
标签可以添加多个。 - transactionManager(事物管理方式):该项的type为JDBC时,表示事物的管理方式为手动,即需要手动的提交、回滚数据库的事务。
- dataSource(数据来源):该项的type为POOLED时,为数据库连接池的方式链接数据库。
- property:该标签通过name和value对数据库链接时的驱动、url、用户名、密码进行设置;其中的value值既可以直接填写,也可以通过引入
properties
文件,用${属性名}
的方式为value赋值。 - mappers(映射器):在该标签中使用
mapper
标签引入映射文件
三、创建mapper接口
- MyBatis中的mapper接口相当于
dao-service-controller
模式中的dao
- 区别是,
dao
中只有接口,需要在impl
中实现后才可以使用。 - mapper仅仅是接口,MyBatis会通过映射把该接口与slq语句链接,不需要我们提供实现类
在module中src/main/java
中创建一个文件夹mapper
专门用来存放各种mapper文件,在其中创建UserMapper.java
文件,其中代码如下
public interface UserMapper {
/*
MyBatis面向接口编程的两个一致
1、映射文件的namespace要和mapper接口的全类名一致
2、映射文件中SQL语句的id要和mapper接口中的方法名一致
表--实体类--mapper接口--映射文件
*/
/*
添加用户信息
*/
int insertUser();
}
四、创建MyBatis的映射文件
4.1、映射文件的命名规则
表所对应的实体类的类名+Mapper.xml
例如:表t_user,映射的实体类为User,所对应的映射文件为UserMapper.xml
因此一个映射文件对应一个实体类,对应一张表的操作
MyBatis映射文件用于编写SQL,访问以及操作表中的数据
MyBatis映射文件存放的位置是src/main/resources/mappers
目录下创建UserMapper.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.atguigu.mybatis.mapper.UserMapper">
<!-- int insertUser();-->
<insert id="insertUser">
insert into t_user values(null , 'admin' , '123456' , 23 , '男' , '12345@qq.com')
</insert>
</mapper>
4.2、两个一致
-
a>mapper接口的全类名和映射文件的命名空间(namespace)保持一致
-
b>mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致
五、通过junit测试功能
在src/test
路径下创建测试文件进行测试
// 加载核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
// 获取SQLSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 获取SqlSessionFactory
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
// 获取SqlSession
// openSession中的true表示自动提交事务,若不添加true,也可以通过commit提交事务
SqlSession sqlSession = sqlSessionFactory.openSession(true);
// 获取mapper接口对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 测试
int result = mapper.insertUser();
// 提交事物
//sqlSession.commit();
System.out.println("result = " + result);
六、加入log4j日志功能
6.1、加入依赖
<!-- log4j日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
6.2、加入log4j的配置文件
加入log4j后,可以在控制台中打印日志信息,便于排查项目中出现的错误,其效果图如下
- log4j的配置文件名为
log4j.xml
,存放的位置是src/main/resources
目录下
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n"/>
</layout>
</appender>
<logger name="java.sql">
<level value="debug"/>
</logger>
<logger name="org.apache.ibatis">
<level value="info"/>
</logger>
<root>
<level value="debug"/>
<appender-ref ref="STDOUT"/>
</root>
</log4j:configuration>
七、MyBatis的增删改查
7.1、添加
<!-- int insertUser();-->
<insert id="insertUser">
insert into t_user values(null , 'admin' , '123456' , 23 , '男' , '12345@qq.com')
</insert>
7.2、删除
<!-- void deleteUser();-->
<delete id="deleteUser">
delete from t_user where id = 1
</delete>
7.3、修改
<!-- void updateUser();-->
<update id="updateUser">
update t_user set username='张三' where id = 2
</update>
7.4、查询一个实体类
-
在
resultType
中填写查询后返回结果的实体对象,其值为该实体对象在项目中的路径。如com.atguigu.mybatis.pojo.User
-
实体类对象的属性需要包含数据库表中的各个字段
| java概念 | 数据库概念 |
| – | – |
| 类 | 表 |
| 属性 | 字段/列 |
| 对象 | 记录/行 | -
可以在核心配置文件
mybatis-config.xml
中给上述路径起别名,从而简化代码。- 方式一:
<typeAlias type="com.atguigu.mybatis.pojo.User" alias="User"></typeAlias>
- 方式二:
<typeAlias type="com.atguigu.mybatis.pojo.User"></typeAlias>
- 方式三:
<package name="com.atguigu.mybatis.pojo"/>
- 方式一:
<!-- 设置类型别名-->
<typeAliases>
<!--
typeAlias:设置某个类型的别名
属性:
type:设置需要设置别名的类型
alias:设置某个类型的别名,若不设置该属性,那么该类型拥有默认的别名,即类名且不区分大小写
-->
<!-- <typeAlias type="com.atguigu.mybatis.pojo.User" alias="User"></typeAlias>-->
<!--以包为单位,设置改包下所有的类型都拥有默认的别名,即类名且不区分大小写 -->
<package name="com.atguigu.mybatis.pojo"/>
</typeAliases>
查询一个实体类代码为:
<!-- User getUserById();-->
<!--
查询功能的标签必须设置resultType或resultMap
resultType:设置默认的映射关系
resultMap:设置自定义的映射关系
-->
<select id="getUserById" resultType="User">
select * from t_user where id = 2
</select>
7.5、查询集合
<!-- List<User> getUserList();-->
<select id="getUserList" resultType="User">
select * from t_user
</select>