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

参考

代码结构

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

数据库创建

CREATE DATABASE  IF NOT EXISTS `mybatis`;

USE `mybatis`;
DROP TABLE IF EXISTS `users`;

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(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

<?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

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

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

<?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

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

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

时间: 2024-11-04 19:40:06

【狂人小白】MyBatis.002 第一个查询!的相关文章

Mybatis实现关联表查询

一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. 1 CREATE TABLE teacher( 2 t_id INT PRIMARY KEY AUTO_INCREMENT, 3 t_name VARCHAR(20) 4 ); 5 CREATE TABLE class( 6 c_id INT PRIMARY KEY AUTO_INCREMEN

mybatis的第一个程序

mybatis的第一个程序 前期准备: 新建一个java工程,或一个java web工程,导入工程所需的包,如下图所示, 整体工程如下图, 新建数据库,在数据库表中添加信息,表的结构如下所示, 数据库名,mybatis,表名user,也可以直接使用语句,如下, create database mybatis; use mybatis; CREATE TABLE user(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), age INT);

MyBatis——实现关联表查询

原文:http://www.cnblogs.com/xdp-gacl/p/4264440.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name VARCHAR(20) ); CREATE TABLE cla

Mybatis 实现关联表查询

一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. 1 CREATE TABLE teacher( 2 t_id INT PRIMARY KEY AUTO_INCREMENT, 3 t_name VARCHAR(20) 4 ); 5 CREATE TABLE class( 6 c_id INT PRIMARY KEY AUTO_INCREMEN

SpringBoot集成Mybatis实现多表查询的两种方式(基于xml)

 下面将在用户和账户进行一对一查询的基础上进行介绍SpringBoot集成Mybatis实现多表查询的基于xml的两种方式.   首先我们先创建两个数据库表,分别是user用户表和account账户表     user表:  account表:  然后创建实体类        **第一种通过创建子类的方式查询                             需求:查询所有的用户基础信息以及其所属的账户中的金额     1.创建想要得到多表查询数据的实体类(子类)            

Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办--转自http://www.jb51.net/article/88236.htm

这篇文章主要介绍了Mybatis使用MySQL模糊查询时输入中文检索不到结果的解决办法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 项目开发中,在做Mybatis动态查询时,遇到了一个问题:MySQL在进行LIKE模糊查询时,输入英文可以正常检索出结果,但是输入中文后检索得到的结果为空. 由于是使用GET方式请求,所以为了确保中文不乱码,在控制台接收到请求参数后,对中文进行了一次编码. ? 1 2 3 4 5 try { realName = new String(realNam

MyBatis学习总结_13_Mybatis查询之resultMap和resultType区别

MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性,而当我们提供的返回类型是resultMap的时候,将数据库中列数据复制到对象的相应属性上,可以用于复制查询,两者不能同时用. 1.resultType 返回单个实例 <select id="selectUser" parameterType="int" resu

Mybatis最入门---动态查询(foreach)

[一步是咫尺,一步即天涯] 本文,我们来介绍使用Mybatis提供的<foreach>标签实现我们某些循环增改删差的需求.官方文档中的内容过于简陋,于是,博主筛选出比较全面讲述foreach用法的的内容,并且配有例子.希望各位看官能够手动敲一遍下面的例子,达到快速学习的目的. 准备工作: a.操作系统 :win7 x64 b.基本软件:MySQL,Mybatis,SQLyog -----------------------------------------------------------

MyBatis直接执行SQL查询及批量插入数据

MyBatis直接执行SQL查询及批量插入数据 一.直接执行SQL查询: 1.mappers文件节选 <resultMap id="AcModelResultMap" type="com.izumi.InstanceModel">  <result column="instanceid" property="instanceID" jdbcType="VARCHAR" />  <