Mybatis_05_第一个Mybatis程序
第一个Mybatis程序
-
开发步骤
1.新建一个Java普通工程,因为Mybatis框架封装了JDBC,写一个Main方法即可测试
2.引入Mybatis的 jar包
- mybatis-3.5.6.jar Mybatis核心jar包 - mysql-connector-java-8.0.18.jar 驱动jar包
-
从 XML 中构建 SqlSessionFactory
从这句话中可以提取出以下信息:
- Mybatis中一定有一个XML文件 - Mybatis中一定有一个类叫做 SqlSessionFactory - SqlSessionFactory对象的创建依赖XML文件
4.创建main方法,写以下代码:
- 通过第一行代码可以知道MMybatis有一个配置文件叫做 mybatis-config.xml,并且该文件放在类路径之下。 - Mybatis默认从类的根路径下作为起点开始查找资源. 什么是类路径 bin是类的根路径,在项目中 Src可以等同看做类的根路径 - 在项目的src根路径下新建一个Myatis-config.xml文件,修改: String resource = "mybatis-config.xml"; String resource = "org/mybatis/example/mybatis-config.xml"; - InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
-
编写Mybatis-config.xml核心配置文件
-
Mybatis核心配置文件主要编写连接数据库的信息,和SQL语句配置文件的路径。
-
通过Mybatis-config.xml核心配置文件中的以下代码可以看出,Mybatis还有另外一个文件,是专门用来编写sql语句的,并且该配置文件也是从类的根路径下开始查找
-
-
编写Sql映射文件, 提供一个专门用来配置sql语句的文件, 这种文件一般叫做sql映射文件(SqlMapper.xml)
-
在类的根路径(src)下新建一个SqlMapper.xml
-
修改Mybatis-config.xml核心配置文件中的
,文件和路径修改为相应的路径文件。 -
编辑 SqlMapper.xml 文件
<!--id属性具有唯一性,是本条Sql语句的唯一标识,本条Sql语句的Id用来传给Java程序,就代表着将本条SQL语句传给了JAVA程序--> <!--resultType属性,告诉Mybatis 所查询出的数据最终封装的类型,要写全类名--> <!--查询结果集的列名 要和 javaBean的属性名对应上,如果不对应的话,需要通过SQL语句的 AS 关键字给数据库中字段名取别名,使数据库中的字段名和实体类中的属性名相一致-->
<select id="getUserInfo" resultType="com.shige.controller.User"> select username as userName,email as userEmail,userpwd as userPwd from t_userinfo; </select>
-
-
-
关于Mybatis的核心API SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession(); // 开启事务
// 执行Sql语句 执行Sql语句 1 执行Sql语句 2 执行Sql语句 3 ..... sqlSession.commit(); sqlSession.roback(); sqlSession.close();
8.查询所有的用户信息
- 程序员需要告诉Mybatis框架什么信息,Mybatis才能自动创建对象,并且自动将查询到的结果集的每列值放到Java对象中对应属性上。
1. 在Sql映射文件<select id="getUserInfo" resultType="com.shige.controller.User" > 查询语句 </select> 标签的属性中填对应的信息
<!--id属性具有唯一性,是本条Sql语句的唯一标识,本条Sql语句的Id用来传给Java程序,就代表着将本条SQL语句传给了JAVA程序-->
<!--resultType属性,是告诉Mybatis 所查询出的数据最终封装的类型,要写全类名。 例如查询用户信息,那么最终数据的封装类型可能就是User-->
<!--查询结果集的列名 要和 javaBean的属性名对应上,如果不对应的话,需要通过SQL语句的 AS 关键字给数据库中字段名取别名,使数据库中的字段名和实体类中的属性名相一致-->
2. 使用sqlSession对象执行selectList()方法,把Sql映射文件中的查询语句id赋值给 selectList("getUserInfoSql");
List<User> userList=sqlSession.selectList("getUserInfoSql"); // 查询所有的用户信息,返回List集合,List集合中存储用户对象
-
整合代码
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; /** * 第一个Mybatis程序 */ public class Test01 { public static void main(String[] args) { //创建空SqlSession对象 SqlSession sqlSession =null; try { //定义mybatis-config.xml 核心配置文件的文件路径 String resource = "mybatis-config.xml"; //将该路径传给字节输入流,字节输入流读取该核心配置文件 InputStream inputStream = Resources.getResourceAsStream(resource); //通过SqlSessionFactoryBuilder().build()方法,将该字节输入流解析成一个SqlSessionFactory对象。 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //通过 SqlSessionFactory.openSession()方法,可以获得一个SqlSession对象。 //本行代码等同于 connection.setAutoCommit(false),事务自动提交机制关闭 //可以这样去理解 SqlSession 等同看做 Connection+Statement,专门用来执行sql语句的一个对象 sqlSession = sqlSessionFactory.openSession(); //do work 执行核心业务逻辑 //查询所有的用户信息,返回List集合,List集合中存储用户对象 List<User> userList=sqlSession.selectList("getUserInfoSql"); //遍历集合输出用户信息 for (User user:userList) { System.out.println(user); } // 没有异常则事务提交 sqlSession.commit(); } catch (IOException e) { //遇到异常之后回滚 if( sqlSession!=null){ sqlSession.rollback(); } e.printStackTrace(); }finally { //释放资源 if(sqlSession!=null){ sqlSession.close(); } } } }