依赖包html
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.42</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
数据库建立语句java
CREATE DATABASE mybatis; USE mybatis; CREATE TABLE T_USER( ID INT(11) PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) DEFAULT NULL, SEX CHAR(2) DEFAULT NULL; AGE INT(11) DEFAULT NULL )
mybatis-config.xmlmysql
<?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"> <!-- XML 配置文件包含对 MyBatis 系统的核心设置 --> <configuration> <!-- 指定 MyBatis 所用日志的具体实现 --> <settings> <setting name="logImpl" value="LOG4J"/> </settings> <environments default="mysql"> <!-- 环境配置,即链接的数据库。 --> <environment id="mysql"> <!-- 指定事务管理类型,type="JDBC"指直接简单使用了JDBC的提交和回滚设置 --> <transactionManager type="JDBC"/> <!-- dataSource指数据源配置,POOLED是JDBC链接对象的数据源链接池的实现。 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://192.168.47.151:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!-- mappers告诉了MyBatis去哪里找持久化类的映射文件 --> <mappers> <mapper resource="mapper/UserMapper.xml"/> </mappers> </configuration>
UserMapper.xmlsql
<?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"> <!-- namespace指用户自定义的命名空间。 --> <mapper namespace="mapper.UserMapper"> <!-- id="save"是惟一的标示符 parameterType属性指明插入时使用的参数类型 useGeneratedKeys="true"表示使用数据库的自动增加策略 --> <insert id="save" parameterType="com.rookie.bigdata.domain.User" useGeneratedKeys="true"> INSERT INTO T_USER(name,sex,age) VALUES(#{name},#{sex},#{age}) </insert> </mapper>
Mybatis.java数据库
public static void main(String[] args) throws IOException { // 读取mybatis-config.xml文件 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); // 初始化mybatis,建立SqlSessionFactory类的实例 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); // 建立Session实例 SqlSession session = sqlSessionFactory.openSession(); // 建立User对象 User user = new User("张三", "男", 26); // 插入数据 session.insert("mapper.UserMapper.save", user); // 提交事务 session.commit(); // 关闭Session session.close(); }
User.java安全
public class User implements Serializable { // 用户标识 private Integer id; // 用户姓名 private String name; // 用户性别 private String sex; // 用户年龄 private Integer age; }
至此保存数据成功
mybatis的执行流程:
1)调用SqlSessionFactoryBuilder对象的Build(inputStream)方法
2)SqlSessionFactoryBuilder会根据输入流inputStream等信息建立XMLConfigBuilder对象
3)SqlSessionFactoryBuilder调用XMLConfigBuilder对象的parse()方法
4)SqlSessionFactoryBuilder对象解析XML配置文件返回Configuration对象
5)SqlSessionFactoryBuilder根据Configuration对象建立一个DefaultSessionFactory对象
6)SqlSessionFactoryBuilder返回DefaultSessionFactory对象给客户端,供客户端使用session
SqlSessionFactoryBuilder:SqlSessionFactoryBuilder 有五个 build() 方法,每一种都容许你从不一样的资源中建立一个 SqlSessionFactory 实例
SqlSessionFactory:SqlSessionFactory是MyBatis的关键对象,它是个单个数据库映射关系通过编译后的内存镜像.SqlSessionFactory对象的实例能够经过SqlSessionFactoryBuilder对象类得到,而SqlSessionFactoryBuilder则能够从XML配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例.每个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心.同时SqlSessionFactory也是线程安全的,SqlSessionFactory一旦被建立,应该在应用执行期间都存在.在应用运行期间不要重复建立屡次,建议使用单例模式.SqlSessionFactory是建立SqlSession的工厂
SqlSession:SqlSession是MyBatis的关键对象,是执行持久化操做的独享,相似于JDBC中的Connection.它是应用程序与持久层之间执行交互操做的一个单线程对象,也是MyBatis执行持久化操做的关键对象.SqlSession对象彻底包含以数据库为背景的全部执行SQL操做的方法,它的底层封装了JDBC链接,能够用SqlSession实例来直接执行被映射的SQL语句.每一个线程都应该有它本身的SqlSession实例.SqlSession的实例不能被共享,同时SqlSession也是线程不安全的,绝对不能讲SqlSeesion实例的引用放在一个类的静态字段甚至是实例字段中.也毫不能将SqlSession实例的引用放在任何类型的管理范围中,好比Servlet当中的HttpSession对象中.使用完SqlSeesion以后关闭Session很重要,应该确保使用finally块来关闭它.mybatis