mybatis学习(一)----入门
一.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.jar
2.写好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 <?xml version="1.0" encoding="utf-8" ?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> 3 <configuration> 4 <!--配置数据库环境,可以有多个environment,default值是其中一个environment的id值--> 5 <environments default="developement"> 6 <environment id="developement"> 7 <!--配置事务管理器,JDBC和MANAGED两种,JDBC可以进行回滚和提交--> 8 <transactionManager type="JDBC"></transactionManager> 9 <!--配置数据源,type=[UNPOOLED | POOLED| JNDI], POOLED表示实现简单的数据池连接,连接可以复用--> 10 <dataSource type="POOLED"> 11 <property name="driver" value="com.mysql.jdbc.Driver"></property> 12 <property name="url" value="jdbc:mysql://localhost:3306/mybatis"></property> 13 <property name="username" value="root"></property> 14 <property name="password" value="123456"></property> 15 </dataSource> 16 </environment> 17 </environments> 18 </configuration>
(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 @Override 33 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 <?xml version="1.0" encoding="utf-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3 <!--namespace一般命名成报名+映射名--> 4 <mapper namespace="me.gacl.mapping.userMapper"> 5 <select id="getUser" parameterType="int" resultType="me.gacl.domain.User"> 6 select * from users where id=#{id} 7 </select> 8 </mapper>
(4)在mybatis-config.xml中注册userMapper.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> <!--配置数据库环境,可以有多个environment,default值是其中一个environment的id值--> <environments default="developement"> <environment id="developement"> <!--配置事务管理器,JDBC和MANAGED两种,JDBC可以进行回滚和提交--> <transactionManager type="JDBC"></transactionManager> <!--配置数据源,type=[UNPOOLED | POOLED| JNDI], POOLED表示实现简单的数据池连接,连接可以复用--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"></property> <property name="username" value="root"></property> <property name="password" value="123456"></property> </dataSource> </environment> </environments> <!--resource值是映射文件所在的路径--> <mappers> <mapper resource="mapping/userMapper.xml"></mapper> </mappers> </configuration>
(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类加载配置文件,注意这里需要捕获IOException 20 //Reader reader = Resources.getResourceAsReader(resource); 21 //参数是Reader类型的 22 //SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); 23 //得到可以执行映射文件中sql的session 24 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对象的sql 29 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的记录查询出来了