【狂人小白】MyBatis.002 第一个查询!

参考

代码结构

1
2
3
4
1. config:配置文件目录
2. pojo:Bean类包
3. controller:数据接口
4. sql:数据库源文件

【狂人小白】MyBatis.002 第一个查询!

数据库创建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE DATABASE  IF NOT EXISTS `mybatis`;
 
USE `mybatis`;
DROP TABLE IF EXISTS `users`;
 
CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `namevarchar(45) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `phone` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
 
LOCK TABLES `users` WRITE;
 
INSERT INTO `users` VALUES (1,'jimmy.song',22,'13810001234'),(2,'sunspot',24,'13812341234');
 
UNLOCK TABLES;

创建链接数据库的配置

位置:cc/fozone/demo/mybatis/config/mybatis.config.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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>
 
    <!-- 配置数据库链接 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!-- 数据库链接驱动 -->
                <property name="driver" value="org.gjt.mm.mysql.Driver"/>
                 
                <!-- 数据库链接 -->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?charset=utf8"/>
                 
                <!-- 数据库帐号密码 -->
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
     
    <!-- 与数据库映射的配置文件列表 -->
    <mappers>
        <mapper resource="cc/fozone/demo/mybatis/config/mapper/User.mapper.xml"/>
    </mappers>
     
</configuration>

创建User类

位置:cc/fozone/demo/mybatis/pojo/User.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package cc.fozone.demo.mybatis.pojo;
 
public class User {
    private int id;
    private String name;
    private int age;
    private String phone;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String toString(){
        return "{id:"+id+",name:"+name+",age:"+age+",phone:"+phone+"}";
    }
}

创建User的数据接口

位置:cc/fozone/demo/mybatis/controller/IUserController.java

1
2
3
4
5
6
7
8
9
10
11
12
13
package cc.fozone.demo.mybatis.controller;
 
import java.util.List;
 
import cc.fozone.demo.mybatis.pojo.User;
 
public interface IUserController {
    // 查询所有的用户
    public List<User> getAllUsers();
     
    // 根据电话查询用户
    public User getUser(String phone);
}

创建User表对应的映射配置

位置:cc/fozone/demo/mybatis/config/mapper/User.mapper.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?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:与Controller接口匹配 
-->
<mapper namespace="cc.fozone.demo.mybatis.controller.IUserController">
    <!--
        User表映射 
        type:类地址
        id:实例化ID
     -->
    <resultMap type="cc.fozone.demo.mybatis.pojo.User" id="userResultMap">
        <id property="id" column="id" />
        <result property="name" column="name" />
        <result property="age" column="age"/>
        <result property="phone" column="phone"/>
    </resultMap>
     
    <!--
        select 查询语句
        id:唯一标示符,与Controller的接口方法一致
        resultMap: 查询的数据实例化注入的对象标示引用
    -->
    <select id="getAllUsers" resultMap="userResultMap">
        <![CDATA[
            select id,name,age,phone from users
        ]]> 
    </select>
     
    <!-- 
        #{phone}:参数,与Controller中的getUser方法中的参数一致
        resultType:查询的数据库实例化注入的类型,与resultMap不能同时使用,但建议使用resultMap
    -->
    <select id="getUser" resultType="cc.fozone.demo.mybatis.pojo.User">
        <![CDATA[
            select id,name,age,phone from users where phone = #{phone}
        ]]> 
    </select>
</mapper>

模拟服务调用

位置:cc/fozone/demo/mybatis/App.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package cc.fozone.demo.mybatis;
 
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
 
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 
import cc.fozone.demo.mybatis.controller.IUserController;
import cc.fozone.demo.mybatis.pojo.User;
 
/**
 * Hello world!
 *
 */
public class App {
    // 数据库链接配置
    private static final String CONFIG = "cc/fozone/demo/mybatis/config/mybatis.config.xml";
    // SQL会话工厂
    private SqlSessionFactory factory;
 
    public App() {
        // 初始化
        this.init();
    }
 
    // 初始化SQL会话工厂
    private void init() {
        InputStream input;
        try {
            input = Resources.getResourceAsStream(CONFIG);
            this.factory = new SqlSessionFactoryBuilder().build(input);
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
 
    // 查询所有用户列表
    public List<User> getUsers() {
        // 打开会话
        SqlSession session = this.factory.openSession();
         
        // 根据映射实例化控制器对象,这里的IUserController.class与Mapper配置中的namespace一致
        IUserController controller = session.getMapper(IUserController.class);
 
        // 获得所有用户
        List<User> list = controller.getAllUsers();
         
        // 关闭会话
        session.close();
 
        return list;
    }
 
    // 根据电话号查询用户
    public User getUser(String phone) {
        User user = null;
         
        // 会话
        SqlSession session = this.factory.openSession();
 
        IUserController controller = session.getMapper(IUserController.class);
         
        // 查询用户,这里传入的参数会被替换在Mapper中的#{phone}占位符
        user = controller.getUser(phone);
         
        session.close();
         
        return user;
    }
 
}

创建测试用例

位置:cc/fozone/demo/mybatis/AppTest.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package cc.fozone.demo.mybatis;
 
import java.util.List;
 
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
 
import cc.fozone.demo.mybatis.pojo.User;
 
public class AppTest {
    private App app;
    @Before
    public void setUp() throws Exception {
        app = new App();
        assertNotNull(app);
    }
 
    @Test
    public void testList() {
        List<User> list = app.getUsers();
        assertEquals(2,list.size());
    }
     
    @Test
    public void testUser(){
        User user = app.getUser("13810001234");
        assertNotNull(user);
        assertEquals("jimmy.song", user.getName());
    }
 
}


结果

AppTest.java文件鼠标右键 -> Run -> JUnit Test

【狂人小白】MyBatis.002 第一个查询!










本文转自 sundunjam 51CTO博客,原文链接:http://blog.51cto.com/sunspot/1554965,如需转载请自行联系原作者
上一篇:easyui小清新俺也晒晒 视频管理软件bs项目


下一篇:ASCII, Unicode, UTF-8, 8进制, 16进制等各种编码学习理解笔记