一、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()); } } }