mybatis 快速入门 - 查表

栏目: 数据库 · 发布时间: 7年前

内容简介:mybatis 快速入门 - 查表
  • win7_x64
  • MySQL
  • IntelliJ IDEA

mybatis简介

MyBatis是一个支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis消除

了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简

单的XML或注解用于配置和原始映射,将接口和 Java 的POJO

(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

参见 http://www.mybatis.org/mybatis-3/zh/index.html

Java Application 中使用 mybatis

创建工程

新建一个普通Java工程,以下为主要文件

MybatisDemo/
|-- libs
||-- mybatis-3.2.1.jar
|`-- mysql-connector-java-5.1.7-bin.jar
`-- src
    |-- com
    |`-- rustfisher
    ||-- Demo.java
    ||-- mapping // 映射文件
    |||-- bigstu_mapper.xml
    ||`-- small_table_mapper.xml
    |`-- pojo
    ||-- SmallUser.java
    |`-- User.java
    `-- res
        `-- conf.xml  // 配置文件

添加相应的jar包

需要2个jar包。可以手动将这两个包添加到工程的依赖里。

mybatis-3.2.1.jar
mysql-connector-java-5.1.7-bin.jar

准备数据库

这里使用的是以前建立好的本地的 MySQL 数据库 localhost:3306/samp_db1 ,数据库中有2张表

可参见: http://rustfisher.github.io/2017/02/25/backend/MySQL_manipulate/

bigstu 结构如下

+----+------+-----+-----+----------+-------------+---------+
| id | name | sex | age | birthday | tell | address |
+----+------+-----+-----+----------+-------------+---------+
......
+----+------+-----+-----+----------+-------------+---------+

small_table 结构如下

+----+------+
| id | name |
+----+------+
......
+----+------+

使用xml中的SQL语句查询数据库中的数据

准备mybatis的配置文件conf.xml

conf.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>
    <environmentsdefault="development">
        <environmentid="development">
            <transactionManagertype="JDBC"/>
            <!-- 配置数据库连接信息 -->
            <dataSourcetype="POOLED">
                <propertyname="driver"value="com.mysql.jdbc.Driver"/>
                <propertyname="url"value="jdbc:mysql://localhost:3306/samp_db1"/>
                <propertyname="username"value="root"/>
                <propertyname="password"value="a123"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!-- 注册mapper文件 -->
        <mapperresource="com/rustfisher/mapping/bigstu_mapper.xml"/>
        <mapperresource="com/rustfisher/mapping/small_table_mapper.xml"/>
    </mappers>
</configuration>

连接的数据库是 samp_db1
注册2个mapper文件,对应数据库中的两张表。这两个文件在下文会提到。

定义模型类 POJO

这里有2个POJO

/**
 * POJO
 * Created by Rust on 2017/4/6.
 */
public final classUser{
    private int id;
    private String name;
    private String sex;
    private int age;
    private Date birthday;
    private String mobile;

    publicintgetId(){
        return id;
    }

    publicvoidsetId(intid){
        this.id = id;
    }

    publicStringgetName(){
        return name;
    }

    publicvoidsetName(String name){
        this.name = name;
    }

    publicStringgetSex(){
        return sex;
    }

    publicvoidsetSex(String sex){
        this.sex = sex;
    }

    publicintgetAge(){
        return age;
    }

    publicvoidsetAge(intage){
        this.age = age;
    }

    publicDategetBirthday(){
        return birthday;
    }

    publicStringgetBirthDayStr(){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        return simpleDateFormat.format(birthday);
    }

    publicvoidsetBirthday(Date birthday){
        this.birthday = birthday;
    }

    publicStringgetMobile(){
        return mobile;
    }

    publicvoidsetMobile(String mobile){
        this.mobile = mobile;
    }

    @Override
    publicStringtoString(){
        return buildStr(getId(), getName(), getSex(), getAge(), getBirthDayStr(), getMobile());
    }

    privateStringbuildStr(Object... inputs){
        StringBuilder sb = new StringBuilder();
        for (Object s : inputs) {
            sb.append(s).append(" ");
        }
        return sb.toString();
    }
}

public classSmallUser{
    private int id;
    private String name;

    publicintgetId(){
        return id;
    }

    publicvoidsetId(intid){
        this.id = id;
    }

    publicStringgetName(){
        return name;
    }

    publicvoidsetName(String name){
        this.name = name;
    }

    @Override
    publicStringtoString(){
        return id + " " + name;
    }
}

定义SQL映射文件

bigstu_mapper.xml 这里的namespace定义成了文件的路径

<?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">
<mappernamespace="com.rustfisher.mapping.bigstu_mapper">

    <!-- 根据id查询得到一个user对象 -->
    <selectid="getUserById"parameterType="int"resultType="com.rustfisher.pojo.User">
        select * from bigstu where id=#{id}
    </select>

    <selectid="getAllUser"resultType="com.rustfisher.pojo.User"> select * from bigstu </select>
</mapper>

定义了2个查询方法,均对应User类

small_table_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">
<mappernamespace="com.rustfisher.mapping.small_table_mapper">

    <selectid="getAllUser"resultType="com.rustfisher.pojo.SmallUser"> select * from small_table </select>
</mapper>

测试代码

public classDemo{
    publicstaticvoidmain(String[] args)throwsIOException{
        String resource = "res/conf.xml";//mybatis的配置文件

        //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
        InputStream is = Demo.class.getClassLoader().getResourceAsStream(resource);
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);

        // 添加Java定义的mapper
        //sessionFactory.getConfiguration().addMapper(IUserMapper.class);

        SqlSession session = sessionFactory.openSession();

        //testMapper(session);

        testXMLFunction(session);

        session.close();
    }

    privatestaticvoidtestMapper(SqlSession session){
        IUserMapper mapper = session.getMapper(IUserMapper.class);
        User user1 = mapper.selectUserById(1);
        System.out.println("\n------- testMapper --------");
        System.out.println(user1);
        System.out.println("------- testMapper getAllUser--------");
        List bigUserList = mapper.getAllUser();
        printList(bigUserList);
    }

    privatestaticvoidtestXMLFunction(SqlSession session){
        String bigSelectOneCMD = "com.rustfisher.mapping.bigstu_mapper.getUserById"; // 映射sql的标识字符串
        String bigSelectAllUserCMD = "com.rustfisher.mapping.bigstu_mapper.getAllUser";
        //执行查询返回一个唯一user对象的sql
        User user = session.selectOne(bigSelectOneCMD, 5);
        List allUsers = session.selectList(bigSelectAllUserCMD);
        List smallAllUsers = session.selectList("com.rustfisher.mapping.small_table_mapper.getAllUser");
        System.out.println(user);
        System.out.println("\n------- big stu -------");
        printList(allUsers);
        System.out.println("\n------ small table ------");
        printList(smallAllUsers);
    }

    privatestaticvoidprintList(List list){
        for (Object obj : list) {
            System.out.println(obj.toString());
        }
    }
}

输出

5 王五 男 22 2017-03-13 666666666 

------- big stu -------
1 张三 男 24 2017-03-29 13666665555 
2 李四 女 21 2017-03-06 13900001111 
4 小强 男 22 1994-06-29 336699111 
5 王五 男 22 2017-03-13 666666666 
6 小刚 男 23 2017-03-11 778899888 
8 小霞 女 20 2017-03-13 13712345678 
12 小智 男 21 2017-03-07 13787654321 

------ small table ------
1 Tom
2 Jerry

至此,可以使用xml中的语句来查询数据

使用Java代码编写Mapper文件

以上文工程为例,使用注解的形式,添加一个接口

/**
 * DAO
 */
public interfaceIUserMapper{
    String TABLE_BIG = "bigstu"; // 需要查询的表

    @Select("select * from " + TABLE_BIG + " where id = #{id}")
    UserselectUserById(intid);

    @Select("select * from " + TABLE_BIG)
    List<User>getAllUser();
}

在加载mybatis时将自定义的mapper类添加进去

sessionFactory.getConfiguration().addMapper(IUserMapper.class);

测试新添加的代码

IUserMapper mapper = session.getMapper(IUserMapper.class);
User user1 = mapper.selectUserById(1); // 根据id查询用户
System.out.println("\n------- testMapper --------");
System.out.println(user1);
System.out.println("------- testMapper getAllUser--------");
List bigUserList = mapper.getAllUser(); // 获取所有用户
printList(bigUserList);

简易封装mybatis

使用了spring框架,在maven中添加

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.2.8</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.6</version>
</dependency>

使用单例的 DBManager

/**
 * 数据库控制中心
 */
public final classDBManager{

    private static DBManager manager = new DBManager();
    private SqlSessionFactory sessionFactory;

    publicstaticDBManagergetManager(){
        if (manager == null) {
            manager = new DBManager();
        }
        return manager;
    }

    privateDBManager(){
        InputStream is = 
        Bootstrap.class.getClassLoader().getResourceAsStream("db_conf.xml"); // 直接使用文件名
        sessionFactory = new SqlSessionFactoryBuilder().build(is);
        sessionFactory.getConfiguration().addMapper(IDeveloperMapper.class);
    }

    publicSqlSessionopenSession(){
        return this.sessionFactory.openSession();
    }
}

db_conf.xml 中的url需要指定时区 jdbc:mysql://localhost:3306/samp_db1?serverTimezone=UTC

在服务器启动的地方初始化一下mybatis

public classBootstrapimplementsWebApplicationInitializer{
    @Override
    publicvoidonStartup(ServletContext container)throwsServletException{
        // spring配置........
        initMybatis();
    }

    /**
     * 初始化数据库管理中心
     */
    privatevoidinitMybatis(){
        DBManager.getManager();
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编译原理

编译原理

Alfred V.Aho、Jeffrey D.Ullman、Ravi Sethi / 李建中 / 机械工业出版社 / 2003-8 / 55.00元

《编译原理》作者Alfred V.Aho、Ravi Sethi和Jeffrey D.Ullman是世界著名的计算机 科学家,他们在计算机科学理论、数据库等很多领域都做出了杰出贡献。《编译原理》 是编译领域无可替代的经典著作,被广大计算机专业人士誉为“龙书”。《编译原理》一 直被世界各地的著名高等院校和科研机构(如贝尔实验室、哥伦比亚大学、普 林斯顿大学和斯坦福大学等)广泛用作本科生和研究生编译原理......一起来看看 《编译原理》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具