很简单的一个小项目,只进行了最基础的数据库查询,但mybatis该有的功能完整的体现出来了。文章底部提供项目完整链接。
项目结构:
原理
大纲:
应用程序找Mybatis要数据
mybatis从数据库中找来数据
2.1 通过mybatis-config.xml 定位哪个数据库
2.2 通过Category.xml执行对应的select语句
2.3 基于Category.xml把返回的数据库记录封装在Category对象中
2.4 把多个Category对象装在一个Category集合中
返回一个Category集合
运行TestMybatis.java后,它将mybatis-config.xml使用Resources.getResourceAsStream()以字节输入流加载进来,然后根据字节流创建一个SqlSessionFactory对象, 再得到session,通过session的selectList方法根据mybatis-config中sql语句的id执行该sql语句, 结果返回在list集合里.
public class TestMybatis { public static void main(String[] args) throws IOException { //根据配置文件mybatis-config.xml得到sqlSessionFactory String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //然后再根据sqlSessionFactory 得到session SqlSession session=sqlSessionFactory.openSession(); //最后通过session的selectList方法,调用sql语句listCategory。listCategory这个就是在配置文件Category.xml中那条sql语句设置的id。 //执行完毕之后,得到一个Category集合,遍历即可看到数据。 List cs=session.selectList("listCategory"); for (Category c : cs) { System.out.println(c.getName()); } }}
上面说到了mybatis-config, 其中主要是写了mybatis的数据库名、账号密码、驱动信息、编码方式:
驱动的配置信息另外包含了时区和是否启用ssl,因为我使用的是高版本mysql。注意转义连接符。
我们注意到pojo包下有一个category.java和xml文件,这俩是啥呢?
category是实体类,作用是把查询的结果映射成实体,用来存储数据。
其配置文件包含了要执行的sql,
当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。
当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。
来看看这二者的代码:
实体类:
public class Category { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
配置文件xml:
写完后也是对所学有了一个梳理,感觉还是有所收获的。
jar包:
mybatis-3.5.2.jar
mysql-connector-java-8.0.11.jar
领取专属 10元无门槛券
私享最新 技术干货