芝麻_糊

导航

mybatis学习(一)----入门

一.Mybatis介绍

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(sDAO)。

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的记录查询出来了

 

posted on 2017-08-26 13:51  芝麻_糊  阅读(319)  评论(0编辑  收藏  举报