情景
数据库中有一个简单数据表,用于储存用户的账户以及登录密码
需要通过Mybatis对该数据表插入新数据
为了实现这目的,我们需要:
- 文件配置
- 写一点Java类
文件配置
文件配置涉及两个文件:
mybatis-config.xml
:所有使用Mybatis的项目通用的配置文件,包含全局配置信息
UserMapper.xml
:自定义映射器的配置文件
全局配置
首先配置mybatis-config.xml
,该文件需要置于Maven项目文件的src/java/resources
路径中。
mybatis-config.xml
包含了Mybatis的所有的配置信息。
1 |
|
配置数据库连接
在数据库之前,先连接数据库。Mybatis使用JDBC驱动连接MySQL,mybatis-config.xml
的数据库连接信息填在环境配置中,环境配置的结构如下
- environments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- environment(环境变量)
按照下列模板填写数据库连接信息:
1 | <environments default="development"> |
环境配置具体内容有点多,之后再详谈(逃
配置映射器
数据库连接配置完成,数据库连上了,如何操作数据库?
使用映射器,用映射器定义SQL映射,从而对数据库进行增删改查。
当然,在本例中只需要进行增——插入操作,所以我们需要建立一个映射器去实现插入操作,起名为UserMapper,UserMapper对应一个配置文件UserMapper.xml
在编写映射器之前,我们需要先在全局配置文件mybatis-config.xml
中定位映射器配置文件,Mybatis提供<mappers>
声明自定义映射器的配置文件位置。
在刚刚填写的数据库连接信息下插入声明UserMapper.xml
文件位置的信息:
1 | <mappers> |
自定义映射器的配置文件与全局配置文件应在同一目录,本项目中UserMapper.xml
在resources/mapper
路径下。
映射器配置
我们最终执行的是一个简单的插入操作,所以我们需要在UserMapper.xml
建立一个插入映射<insert>
1 | <insert id="insertUser" parameterType="User"> |
id
需要和映射器中的方法名对应,所以后面在构造映射器时,我们需要在映射器中写一个名为insertUser
的方法。
parameterType
代表传入的参数类型,这里我们选择自定义类型User
作为传入参数的类型。
username
、password
都是User中的私有属性,代表插入的用户民与密码。
User的具体实现会在下一个部分说明。
写一点JAVA类
完成文件配置后,为了达到通过Java程序插入数据的目的,还得写一点Java类:
映射器:UserMapper
Java Bean:User
数据工厂:MyBatisUtil
构造映射器UserMapper
UserMapper
是数据库映射接口,在UserMapper.xml
声明了一个id
为insertUser
映射,因此我们需要在UserMapper
中写一个与之对应的方法:
1 | public interface UserMapper { |
编写Java Bean:User
通过User
将欲插入的数据传给映射器UserMapper
。
User
包含两个私有属性:
- username
- password
对应数据表中用户名与密码。
编写对应的get
和set
方法:
1 | public class User { |
数据工厂MyBatisUtil
有了映射器,传递数据的Java Bean,Mybatis还需要实例化一个SqlSessionFactory
,才能对数据库进行操作。
1 | import org.apache.ibatis.io.Resources; |
SqlSessionFactoryBuilder
会根据我们之前配置的配置文件构造一个SqlSessionFactory
,所以我们不需要重复构造SqlSessionFactory
,只用通过数据工厂MyBatisUtil传入我们需要调用的映射器,就可以获得SqlSessionFactory
返回对应的SqlSession
,从而对数据库进行操纵。
很麻烦对吗,是的很麻烦。
这么做当然是值得的,我们成功降低了耦合!!!
OK,到这里我们已经完成所有准备工作,芜湖!接下来只需要编写一个测试程序来进行插入操作!
实践
在搞事之前,先在测试类中声明一个数据工厂sqlSessionFactory
1 | static SqlSessionFactory sqlSessionFactory = null; |
编写一个testAdd
方法用以插入数据:
1 | public static void testAdd() { |
(1)映射器UserMapper
从sqlSessionFactory
获取了对应的SqlSession
;
(2)实例化一个User
对象user,user包含了需要插入到数据表的用户名与密码(“mybatis”,”114514”);
(3)映射器UserMapper
调用对应<insert id="insertUser">
的insertUser
方法,传入user对象;
(4)SqlSession
向数据库提交刚刚的插入操作;
(5)关闭SqlSession
与数据库的连接.
大功告成,数据库那一头不出意外应该可以看到新插入的数据。