MyBatis的初始和搭建
学习要点
ORM与Mybatis
MyBatis的简单搭建
数据源的讲解
ORM与Mybatis
ORM:全程(Object/Relation Mapping)即对象/关系数据库映射,简单来时就是用面对对象的方式去操作数据库。
流行的ORM框架:
JPA:本身并不是一种ORM的产品,只是集合众多的ORM框架,对ORM框架的一种规范。可以在各种ORM框架中切换。
Hibernate:ORM框架,被选为JBOSS的持久层解决方案,实现面向对象操作数据库,Hibernate可以调用储存过程。
MyBatis:也算是一种ORM框架,但是也算是一种半自动的的ORM框架,不支持纯粹的面向对象曹组数据库,而是开发人员直接编写SQL来操作数据库。
MyBatis的简单搭建
所有的ORM框架都有一个非常重要的媒介(PO,持久层对象),持久层对象作用就是完成持久层的操作,简单的说,就是利用持久层的对象完成数据库的增删改查的操作,也就是面向对象的方式操作数据库。
Mybatis直接采用了POJO(普通,传统的java对象)作为持久层对象,这就是被称为低侵入式设计的原因,Mybatis不要求持久化类继承任何父类,或者任接口,这样可以保证代码不被污染。
当然这样Mybatis不知道持久类对象和数据库的关系,Mybatis需要通过配置文件(xml配置文件)来让数据库和持久化对象产生关联。
1.修改pom文件对MyBatis的支持
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.pkk</groupId>
<artifactId>MyBatis1</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<!--配置默认pom的配置-->
<file.encoding>UTF-8</file.encoding>
<java.source.version>1.8</java.source.version>
<java.target.version>1.8</java.target.version>
<!--以来组件的版本号-->
<mybatis.version>3.2.8</mybatis.version>
<mysql.version>5.1.38</mysql.version>
<log4j.version>1.2.17</log4j.version>
</properties>
<dependencies>
<!--添加MyBatis的支持-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!--Mysql的支持-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
</project>
2.创建数据库,创建user表
CREATE TABLE `NewTable` (
`id` int(11) NULL ,
`username` varchar(16) NULL COMMENT '用户名' ,
`password` varchar(16) NULL COMMENT '用户密码'
);
3.创建创建实体类user
package com.pkk.entity;
/**
* @author peikunkun
* @version V1.0
* @Title: MyBatisProject
* @Package com.pkk.entity
* @Description: <>
* @date 2017/12/31 19:31
*/
public class User {
private Integer id;
private String username;
private String password;
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
public User(Integer id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
4.数据库层与持久层的映射配置文件userMapper.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:com.model.professional -->
<!--namespace保证唯一,习惯上是包名+配置文件的名称如config.mybatis(包名)+userMapper(userMapper.xml配置文件去掉.xml后缀)-->
<mapper namespace="com.pkk.entity.UserMapper">
<!--id属性值必须唯一,是insert标签-->
<!--parameterType指明插入时用的数据类型-->
<!--useGeneratedKeys=true指定使用数据库总动增长策略,需要底层数据库支持-->
<insert id="saveUser" parameterType="com.pkk.entity.User" useGeneratedKeys="true">
<!-- 底层的SQL语句 通过#{}来进行获取值和赋值-->
INSERT INTO USER (username,password) VALUE (#{username},#{password})
</insert>
</mapper>
5.mybatis的支持,其配置文件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>
<!--指定MyBatis所用的日志具体实现-->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!--环境配置,即连接的数据库-->
<environments default="mysql">
<environment id="mysql">
<!--使用jdbc的事务提交与回滚设置-->
<transactionManager type="JDBC"/>
<!--配置数据源,POOLED是JDBC连接对象的数据源连接池的实现-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis"/>
</dataSource>
</environment>
</environments>
<!--mapper告诉了MyBatis去哪里找持久化的映射文件-->
<mappers>
<mapper resource="config/mybatis/userMapper.xml"></mapper>
</mappers>
</configuration>
6.mybatis的测试类
package com.pkk.test;
import java.io.InputStream;
import java.util.Random;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggerFactory;
import com.pkk.entity.User;
/**
* @author peikunkun
* @version V1.0
* @Title: MyBatisProject
* @Package com.pkk.test
* @Description: <>
* @date 2017/12/31 20:05
*/
public class MyBatisTest {
private static Logger logger = Logger.getLogger(MyBatisTest.class);
public static void main(String[] args) {
/*获取当前mybatis配置文件*/
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("mybatis-config.xml");
/*创建sqlSessionFactory对象*/
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
/*创建SQLSession对象操作持久层对象*/
SqlSession session = sqlSessionFactory.openSession();
/*创建User对象,同时User要有构造方法 public User(String username, String password) {}和 public User(){}*/
User user = new User("root" + new Random().nextInt(), "password" + new Random().nextInt());
/*执行插入操作*/
int result = session.insert("com.pkk.entity.UserMapper.saveUser", user);
/*提交*/
session.commit();
/*关闭*/
session.close();
//logger.info("插入数据结果:" + result);
System.out.println("插入数据结果:" + result);
}
}
7.到此,mybatis的基本项目已经搭建完成
数据源的讲解
数据源是用来提高数据库连接性能的常规手段,数据源会负责维持一个数据库连接池,当程序创建一个数据源实例时,系统会一次性的创建多个数据库连接,并把这些数据库连接保存到数据连接池中,当程序需要用到数据库连接的时候,无需重新与数据库建立新的连接,而是从数据库连接池中取出一个空闲的数据库连接就可,当程序使用数据库连接访问结束时,无需关闭数据库连接,而是将数据库连接归还给连接池,通过这种方式就可以避免重复性的与数据库建立连接和关闭连接造成的性能降低。
当然,数据库连接池可以设置保留一定的连接数和最低数,每次超出连接重新创建的连接数等,这些都是可以通过数据库的配置进行修改。
在Mybatis中可以配置多个数据源,可以通过default进行设置选择其中之一来为SqlSessionFactory提供数据源。(配置类似如下)
<!--环境配置,即连接的数据库-->
<environments default="mysql">
<environment id="mysql">...</environment>
<environment id="oracle">...</environment>
</environments>
看了一下网上,有关于使用多个数据源的成功案例,