这就是我们今天的主角,mybatis!
今天我写了第一个mybatis程序,过程有些曲折不过最终的结果还是让人比较满意的!
首先,我们先来说一下mybatis的使用步骤:
1.准备工作
首先我们需要去github上下载mybatis的jar包,网址为https://github.com/mybatis
然后别忘了将mybatis的jar包导入到你的项目中!
我们需要两个xml文件对mybatis进行配置,它们分别是mybatis.xml和mapper.xml(当让,两个配置文件的名称都是任意的,但是我们尽量做到见名知义)。
1>mybatis.xml为主配置文件,需要存放在src下
我们来看看mybatis.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>
<environments default="database1">
<environment id="database1">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="1103285470"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/sdp/mybatis/Dao/mapper.xml"/>
</mappers>
</configuration>
2>mapper.xml为映射文件一般放在dao包下
源码如下:
<?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="mymapper">
<insert id="_insert" parameterType="com.sdp.mybatis.Student">
insert into student(name,age,sex) values(#{name},#{age},#{sex})
</insert>
</mapper>
2.进入正题
1.首先我们需要创建SqlSessionFactoryBuilder对象
SqlSessionFactory sqlsessionfactory=new SqlSessionFactoryBuilder();
2.创建输入流InputStream,该输入流中的内容是主配置文件的内容mybatis.xml(Resource对象为org.apache.ibatis.io.Resources,不要导错了);
//加载配置文件
InputStream is=Resources.getResourceAsStream("mybatis.xml");
3.通过调用SqlSessionFactoryBuilder对象的builder参数来创建一个SqlSessionFactory对象来创建SqlSession对象。(builder方法的参数就是我们的InputStream);
SqlSessionFactory sqlsessionfactory=new SqlSessionFactoryBuilder().build(is);
4.然后我们可以就可以调用sqlsessionfactory对象的opensession方法的到SqlSession对象了,该对象可以直接对数据库进行操作;
SqlSession sqlsession = sqlsessionfactory.openSession();
5.调用sqlsession对象的各种操作数据库的方法即可;
//调用sqlsession的insert方法,向数据库写入数据
sqlsession.insert("_insert",student);
这里需要特别注意以下,insert方法有两个参数,第一个是我们要调用的方法名,就是在mapper.xml中配置的insert方法id而另一个参数就是我们需要添加到数据库的对象,改对象的类型应与mapper.xml中配置的insert方法的paramterType一致,否则会出现异常!
这是我们一运行,不会报错,但是检查数据库,不会有数据被插入数据库,这是为什么呢?
我们可以通过查看运行日志来找到线索。
也就是说我们只要再增加一条事务提交语句就可一了,而我们的SqlSession对象中就有事务提交方法直接调用它就好
sqlsession.commit();//提交事务
这时再看,数据库就插入了我们传入的对象了,可以说我们的插入已经成功了,但是你会发现如果你使用了自增的主键的话,该主键的值已经不在是一了,这是为什么呢?因为我们前几次没有加提交语句,数据库已经为我们生成了主键但是我们没有用它,知道提交的那一次,才有到了它,而前面几次生成的就作废了!
后言:
大家可能会发现mybatis的依赖jar包中出现了log4j,很多时候,日志可以告诉哦我们程序在哪里出错了,我们应该如何改错,说一建议没学过log4j和log4j2的朋友下去了解以下日志相关的知识,不难,但是以后会用的很多。谢谢大家!