Mybatis框架快速入门(二)
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
2.实现步骤:

第一步:添加mybatis和mysql驱动的依赖,然后点击右上角的maven刷新按钮,检查依赖是否添加进去
<!-- 添加mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<!-- 添加mysql驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
第二步:创建实体类,保存表中的一行数据
package com.bjpowernode.domain; public class Province { private Integer id; private String name; private String jiancheng; private String shenghui; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getJiancheng() { return jiancheng; } public void setJiancheng(String jiancheng) { this.jiancheng = jiancheng; } public String getShenghui() { return shenghui; } public void setShenghui(String shenghui) { this.shenghui = shenghui; } @Override public String toString() { return "Province{" + "id=" + id + ", name='" + name + '\'' + ", jiancheng='" + jiancheng + '\'' + ", shenghui='" + shenghui + '\'' + '}'; } }
第三步:创建持久层的到接口,定义操作数据库的方法
package com.bjpowernode.dao; import com.bjpowernode.domain.Province; import java.util.List; public interface ProvinceDao { /** * 查询Province表的所有数据 * 1.返回值:是一个List的集合,集合中的元素是Province对象 * 2.该方法对应的是SQL语句的执行,该语句要写在SQL映射文件里面 */ public List<Province> selectProvinces(); }
第四步:定义SqlMapper.xml文件:书写和接口方法中对应的SQL语句
1.SqlMapper.xml文件配置说明

2.SqlMapper.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.bjpowernode.dao.ProvinceDao"> <select id="selectProvinces" resultType="com.bjpowernode.domain.Province"> select id,name,shenghui,jiancheng from province order by id </select> </mapper>
第五步:创建主配置文件:1)连接数据库 2)指定Mapper文件位置
<?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> <settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <!-- 环境配置:数据库的连接信息 environment:数据库的信息配置 default:和某个environment的id值必须一致,告诉mybatis要使用哪个数据库 --> <environments default="myDev"> <environment id="myDev"> <!-- id:环境的名称,具有唯一性 --> <!-- transactionManager:mybatis的事务类型 type:表示使用jdbc中的Connection对象的commit,rollback做事务处理 --> <transactionManager type="JDBC"/> <!-- dataSource:表示数据源,用来连接数据库 type:数据源的类型,POOLED:表示使用连接池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/bjpowernode"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!-- mappers:sql映射文件的位置 mapper:一个mapper标签指定一个文件的位置 从类路径(target/classes)开始的路径信息 注意:target/classes目录下要有ProvinceDao.xml文件存在 --> <mappers> <mapper resource="com/bjpowernode/dao/ProvinceDao.xml"/> </mappers> </configuration>
第六步:(测试)创建mybatis类,通过mybatis访问数据库
package com.bjpowernode; import com.bjpowernode.domain.Province; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; import java.util.List; public class MyApp { public static void main(String[] args) throws IOException { // 访问mybatis读取province数据 String config = "mybatis.xml";// 1.定义mybatis主配置文件的名称,从类路径的根开始(target/classes) InputStream in = Resources.getResourceAsStream(config);// 2.读取这个config表示的文件 // 3.创建SQLSessionFactoryBuilder对象 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); // 4.创建SQLSessionFactory对象 SqlSessionFactory factory = builder.build(in); // 5.获取SQLSession对象 SqlSession sqlSession = factory.openSession(); // 6.指定要执行的SQL语句标识。SQL映射文件中:namespace + "." + 标签的id值 String sqlId = "com.bjpowernode.dao.ProvinceDao" + "." + "selectProvinces"; // 7.执行SQL语句,通过SQLID找到语句 List<Province> provinceList = sqlSession.selectList(sqlId); // 8.输出结果 provinceList.forEach(pro -> System.out.println(pro)); // 9.关闭资源 sqlSession.close(); } }
第七步:注意事项
1.如果: Could not find resource mybatis.xml
2.就把ProvinceDao.xml和mybatis.xml文件手动复制到target目录下的classes目录中。
总结:
2.插入方法测试
第一步:接口中增加插入方法
package com.bjpowernode.dao; import com.bjpowernode.domain.Province; import java.util.List; public interface ProvinceDao { /** * 插入方法 * 1.参数:province,表示要添加到数据库的数据 * 2.返回值:int,表示执行insert操作后,影响数据库的行数 */ public int insertProvince(Province province); }
第二步:打开Mapper文件(ProvinceDao.xml)
<!-- 插入方法 -->
<insert id="insertProvinc">
insert into province values(#{id},#{name},#{jiancheng},#{shenghui})
</insert>
第三步:测试类
public class TestMybatis { // 测试插入方法 @Test public void testInsert() throws IOException { // 访问mybatis读取province数据 String config = "mybatis.xml";// 1.定义mybatis主配置文件的名称,从类路径的根开始(target/classes)
InputStream in = Resources.getResourceAsStream(config);// 2.读取这个config表示的文件
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); // 3.创建SQLSessionFactoryBuilder对象
SqlSessionFactory factory = builder.build(in); // 4.创建SQLSessionFactory对象
SqlSession sqlSession = factory.openSession(); // 5.获取SQLSession对象 String sqlId = "com.bjpowernode.dao.ProvinceDao" + "." + "insertProvince"; // 6.指定要执行的SQL语句标识。SQL映射文件中:namespace + "." + 标签的id值 Province pro1 = new Province(10,"山东","鲁","济南"); // 7.执行SQL语句,通过SQLID找到语句 int num = sqlSession.insert(sqlId, pro1);
sqlSession.commit(); // 因为mybatis默认不提交事务,所以在insert、delete、update的时候,需要手动提交一下。 System.out.println("执行插入方法后的结果是:" + num); // 8.输出结果 sqlSession.close(); // 9.关闭资源 } }
第四步:配置日志
1.写在<configuration>标签里面第一个标签位置
2.在mybatis.xml文件加入日志配置,可以在控制台输出执行的SQL语句和参数。
3.配置内容
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
3.主要类的介绍
1.Resources:
1.mybatis中的一个类,负责读取主配置文件。
2.示例
String config = "mybatis.xml";
InputStream in = Resources.getResourceAsStream(config);
2.SqlSessionFactoryBuilder
1.创建SqlSessionFactory对象
2.示例
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
3.SqlSessionFactory
1.重量级对象,在整个项目中有一个就够用了
2.作用:获取SqlSession对象
3.示例:
SqlSession sqlSession = factory.openSession();
4.openSession()方法说明
1.openSession():无参数,获取的是非自动提交事务的SqlSession对象
2.openSession(boolean):openSession(true):获取的是自动提交事务的SqlSession对象
5.SqlSession对象
1.它不是线程安全的,在执行sql语句之前,需要使用openSession()方法获取。
2.执行sql语句之后,就要关闭这个对象,这样才能保证它的使用是线程安全的。
4.使用了工具类以后,下面是优化版的测试类
package com.bjpowernode; import com.bjpowernode.domain.Province; import com.bjpowernode.util.MyBatisUtils; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import java.io.IOException; import java.io.InputStream; public class TestMybatis2 { // 测试插入方法 @Test public void testInsert() throws IOException { SqlSession sqlSession = MyBatisUtils.getSqlSession(); // 1.指定要执行的SQL语句标识。SQL映射文件中:namespace + "." + 标签的id值 String sqlId = "com.bjpowernode.dao.ProvinceDao" + "." + "insertProvince"; // 2.执行SQL语句,通过SQLID找到语句 Province pro1 = new Province(11,"四川","川","成都"); int num = sqlSession.insert(sqlId, pro1); // 3.输出结果 System.out.println("执行插入方法后的结果是:" + num); // 4.关闭资源 sqlSession.close(); } }

浙公网安备 33010602011771号