一.Mybatis介绍
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
二.快速入门
1.首先创建maven的javaWeb项目,然后在pom.xml文件中添加依赖项,那么maven就会自动下载导入以下两个jar包。如下图:
【mybatis】
mybatis-3.4.2.jar
【MYSQL驱动包】
mysql-connector-java-6.0.6.jar2.写好sql脚本
1 create database mybatis;2 use mybatis;3 CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);4 INSERT INTO users(NAME, age) VALUES('zhimahu', 25);5 INSERT INTO users(NAME, age) VALUES('liangming', 27);
在navicat for sql中运行脚本文件,连接上右键---运行SQL文件
完成后看到创建的数据库和表
那么准备工作就做完了
3. 使用MyBatis查询表中的数据
(1)首先在【main】中的resources下创建【mybatis-config.xml】文件
1 2 34 5 6 187 8 179 10 11 1612 13 14 15
(2)创建POJO类,在【main】-【java】下创建包路径com.gacl.domain,然后创建User类,User中的属性与表user中一一对应
1 package me.gacl.domain; 2 3 public class User { 4 private int id; 5 private String name; 6 private int age; 7 8 public int getId() { 9 return id;10 }11 12 public void setId(int id) {13 this.id = id;14 }15 16 public String getName() {17 return name;18 }19 20 public void setName(String name) {21 this.name = name;22 }23 24 public int getAge() {25 return age;26 }27 28 public void setAge(int age) {29 this.age = age;30 }31 32 @Override33 public String toString() {34 return "User{" +35 "id=" + id +36 ", name='" + name + '\'' +37 ", age=" + age +38 '}';39 }40 }
注意:POJO类的toString()方法最好加上,这是个好习惯
(3)在【main】-【resources】下创建包【mapping】,并创建userMapper.xml(操作users表的sql映射文件)
1 2 3 45 8
(4)在mybatis-config.xml中注册userMapper.xml映射信息
(5)编写测试类
1 package me.gacl.domain; 2 3 import org.apache.ibatis.io.Resources; 4 import org.apache.ibatis.session.*; 5 import java.io.InputStream; 6 import java.io.Reader; 7 8 /** 9 * Created by huyanxia on 2017/8/26.10 */11 public class UserTest {12 public static void main(String[] args) {13 //加载mybatis的配置文件14 String resource="mybatis-config.xml";15 //使用类加载器加载mybatis的配置文件(它也会加载关联的映射文件)16 InputStream is = UserTest.class.getClassLoader().getResourceAsStream(resource);17 //构建sqlSession的工厂,感兴趣可以去看源码,通过XMLConfigBuilder中parse()方法进行解析节点18 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);19 //使用mybatis提供的Resources类加载配置文件,注意这里需要捕获IOException20 //Reader reader = Resources.getResourceAsReader(resource);21 //参数是Reader类型的22 //SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);23 //得到可以执行映射文件中sql的session24 SqlSession session = sessionFactory.openSession();25 //statement是映射sql的标识字符串,me.gacl.mapping.userMapper是userMapper.xml中mapper标签的namespace属性,26 // getUser是select标签的id,通过select标签的id值可以找到要执行的sql语句27 String statement = "me.gacl.mapping.userMapper.getUser";28 //执行查询一个唯一id的User对象的sql29 User user = session.selectOne(statement,1);30 System.out.println(user);31 }32 }
(6)运行测试类
出现java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required,原因是用的6.几版本jar包,可能跟客户端版本不对,
将pom.xml中的mysql驱动包换成5.1.43版的正常运行
可以看到mysql数据中的id=1的记录查询出来了