一、MyBatis学习

  平时我们都用JDBC访问数据库,除了自己需要写SQL,还要操作Connection,Statement,ResultSet这些。

  使用MyBatis,只需要自己提供SQL语句,其他的工作,建立数据库连接,Statement等一些JDBC相关异常处理工作都交给了MyBatis去做了。只关心增删改查操作层面上。

MyBatis的工作原理:

每一个MyBatis的应用程序都可以一个SqlSessionFactory对象的实例为核心。首先是通过字节流InputStream通过Resource将配置文件读入,然后通过SqlSessionFactoryBuiler().build()方法创建SqlSessionFactory,然后在通过SqlSessionFactory.openSession()方法创建一个SqlSession为每一个数据库事务服务。经历了MyBatis初始化--->创建SqlSession--->运行SQL语句,返回结果

1、建立数据库

create database demo

2、创建实体类

package com.demo.pojo;

public class Category{
private int id;
private String name;
//属性的getter/setter方法
publci int getId(){
return id;
}
public vodi setId(int id){
this.id=id;
}
public String getName(){
return name;
}
public vodi setName(String name){
this.name=name;
}
}

3、配置文件mybatis-config.xml

  相当于hibernate.cfg.xml

作用:提供链接数据库用的驱动,数据库名称,编码方式,密码账号

<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/demo?characterEncoding=UTF-8"/>
<property name="username" value="root">
<property name="password" value="admin">

具体配置mybatis-config.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>
<!--自动扫描com.demo.pojo下的类型,使得在后续配置文件Category.xml种使用resultType的时候,可以直接使用Category,而不必写全cmo.demo.pojo.Category-->
<typeAliases>
<package name="com.demo.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
</dataSource>
</environment>
</environments>
<!--映射Category.xml-->
<mappers>
<mapper resource="com/dmeo/pojo/Category.xml"/>
</mappers>
</configuration>

4、配置文件Category.xml

  在包com.demo.pojo下,新建文件Category.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">
<!--命名空间com.demo.pojo,在后续调用sql语句的时候,会用到它里面的sql语句-->
<mapper namespace="com.demo.pojo">
<!--sql语句用id:listCategory进行标示,以供后续代码调用。resultType="Category"表示返回数据和Category关联起来。-->
<!--这里本应该使用com.demo.pojo.Category,但是在mybatis-config.xml中的配置了<typeAliases><package name="com.demo.pojo"/></typeAliases>,所以可以直接使用Category-->
<select id="listCategory" resultType="Category">
select * from category_
</select>
</mapper>

5、测试类TestMyBatis

package com.demo;

import java.io.IOException;
import java.io.InputStream;
import java.util.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 com.demo.pojo.Category; public class TestMyBatis{
public static void main(String[] args) throw 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。
List<Category> cs=session.selectList("listCategory");
//List<Category> cs=session.selectList("com.demo.pojo.listCategory");效果一样,只是比较臃肿,建议用上面那个
for(Category c:cs){
System.out.println(c.getName());
}
}
}

二、MyBatis的基本原理

1、应用程序找到MyBatis要的数据

2、MyBatis从数据库找到数据

  2.1、通过mybatis-config.xml定位哪个数据库

  2.2、通过Category.xml执行对应的select语句

  2.3、根据Category.xml把返回的数据库记录封装在Category对象中

  2.4、把多个Category对象装在一个Category集合中

3、返回一个Category集合

最新文章

  1. 01.SQLServer性能优化之----强大的文件组----分盘存储
  2. .NET Core的文件系统[1]:读取并监控文件的变化
  3. spring入门(三)【事务控制】
  4. 网络HTTP协议
  5. javascript this在事件中的应用
  6. hdu2248
  7. SQL Server数据库PIVOT函数的使用详解(二)
  8. jQuery实现的分页功能,包括ajax请求,后台数据,有完整demo
  9. 【POJ1005】I Think I Need a Houseboat
  10. jquery判断元素是否隐藏的多种方法
  11. mysql表修改
  12. FileTable初体验
  13. android studio没有浮现函数用法和属性说明?
  14. Django Middleware简介
  15. python类:类方法和静态方法
  16. 干货|一文读懂 Spring Data Jpa!
  17. 对国内IoT的展望
  18. ASP.NET Core使用HttpClient的同步和异步请求
  19. 在Linux下开发多语言软件(gettext解决方案)
  20. 如何安装MySQL5.5.62

热门文章

  1. repr() 和 str() 函数
  2. HDU 4557 Tree(可持久化字典树 + LCA)
  3. HttpUrlConnection底层实现和关于java host绑定ip即时生效的设置及分析
  4. 手把手教你学习R语言
  5. zipkin启动报错(Caused by: java.lang.ClassNotFoundException: zipkin.Component)的解决方法
  6. 二: vue的属性及功能,axios
  7. UT, FT ,E2E 测试的意思
  8. Spring Bean的生命周期例子
  9. MySQL中的排序(ORDER BY)
  10. long long 与__int64