MyBatis笔记(一) 最简单的select

 

  小白学习MyBatis的第一天,学习资料包括MyBatis3的官方文档,以及孤傲苍狼大佬的博客。这里先致敬大佬。

· 首先,什么是MyBatis?

  引用官网的一段话,“MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。”

  MyBatis的一个强大之处在于,“避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集”。举个栗子,传统的JDBC在拼接SQL语句的过程中,经常会出现少加空格、多个逗号、多个AND/OR之类的错误,不胜其烦;MyBatis的动态SQL中的<if>,<choose>,<where>等语法很好的解决了这一问题。这段在后面动态SQL部分细说。

  好了,闲话少说,进入正题。

· 建立Java项目,导入Jar包

  首先展示一下工程目录。在classpath目录下,建立一个lib文件夹,导入以下三个jar包

  

  mybatis-3.4.6.jar即是MyBatis的jar包,要使用MyBatis, 只需将mybatis-x.x.x.jar文件置于 classpath 中即可;

  mysql-connector-java即数据库驱动;

  log4j用于显示日志,可以在调试过程中打印出SQL语句,便于学习。

  【挖个坑:log4j的jar包和log4j.properties共同用于输出日志,至于原理……我也没搞懂】

扫描二维码关注公众号,回复: 4766465 查看本文章

——————————————————————————————————————————————————————————

  数据库方面,建立一张user表,插入张三和李四两个用户。

  

· 先实现一个最简单的查询

  先看一眼工程目录,建立如下的文件:

  

  目前src下需要bean,dao,config和util四个包,分别存放JavaBean,配置文件,客户端代码(使用MyBatis执行各种操作),以及工具类(封装了获取SqlSession的方法)。

  首先在src下的config文件下,写一个总的配置文件MyBatisConfiguration.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="UNPOOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
        <property name="username" value="root"/>
        <property name="password" value="Danny2036"/>
      </dataSource>
    </environment>
  </environments>

</configuration>

  这里先只需要环境配置,即environments中的driver,url,username和password四项。

  driver为驱动,在mysql-connector-java 5中,值为"com.mysql.jdbc.Driver"; mysql-connector-java 6中,值为"com.mysql.cj.jdbc.Driver"。其他项包括url,username,password,根据自己的数据库进行配置。

  在bean目录下建立JavaBean。(这里先不要管那个UID)

package com.alleymeowy.bean;

import java.io.Serializable;

public class User implements Serializable {
    
    private static final long serialVersionUID = 3305858088000394142L;
    private Integer id;
    private String name;
    private Integer age;

    // 快速生成构造函数 toString方法 以及get&set方法的快捷键  alt+insert
    public User() {
    }

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public User(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getage() {
        return age;
    }

    public void setage(Integer age) {
        this.age = age;
    }
}

  在util包里添加一个获取SqlSession的方法。

package com.alleymeowy.util;

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 java.io.IOException;
import java.io.Reader;

public class DBUtil {

    public static SqlSession getSqlSession() throws IOException {

        // 1.reader
        Reader reader = Resources.getResourceAsReader("com/alleymeowy/config/MyBatisConfiguration.xml");
        // 2.SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        // 3.SqlSession
        return sqlSessionFactory.openSession();

    }
}

  在config包下建一个sql包,添加Users.xml文件,实现selectOne和selectAll方法。

<?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" >
<mapper namespace="com.alleymeowy.config.sql.Users">

  <select id="selectOne" parameterType="int" resultType="com.alleymeowy.bean.User">
    select id, name, age from user where id = #{id}
  </select>

  <select id="selectAll" resultType="com.alleymeowy.bean.User">
    select id, name, age from user
  </select>

</mapper>

  【注意:这里需要在总配置文件里加上mappers的声明,放在<environments>标签之后。总配置文件的标签需要按顺序摆放,详见官方文档。】

 <mappers>
    <mapper resource="com/alleymeowy/config/sql/Users.xml"/>
    <!--<mapper class="com.alleymeowy.annotation.UserMapper"/>-->
    <!--<mapper class="com.alleymeowy.mapper.BlogMapper"/>-->
  </mappers>

  在dao包里写一个实现类。先实现一个最简单的selectOne和selectAll方法。

package com.alleymeowy.dao;

import com.alleymeowy.bean.User;
import com.alleymeowy.util.DBUtil;
import org.apache.ibatis.session.SqlSession;

import java.io.IOException;
import java.util.List;

public class UserDAO {

    /**
     * 根据id查询一条记录
     * @param id
     * @throws IOException
     */
    public static User selectOne(int id) throws IOException {

        SqlSession sqlSession = null;
        User user;
        try {
            sqlSession = DBUtil.getSqlSession();
            user = sqlSession.selectOne("com.alleymeowy.config.sql.Users.selectOne", id);
        } finally {
            sqlSession.close();
        }
        return user;

    }

    /**
     * 查询多条记录
     * @throws IOException
     */
    public static List<User> selectAll() throws IOException {

        SqlSession sqlSession = null;
        List<User> users;
        try {
            sqlSession = DBUtil.getSqlSession();
            users = sqlSession.selectList("com.alleymeowy.config.sql.Users.selectAll");
        } finally {
            sqlSession.close();
        }
        return users;

    }
    
    public static void main(String[] args) throws IOException {

        System.out.println(selectOne(1));
        System.out.println("************");
        System.out.println(selectAll());
    }
}

  最后给出查询结果(只给出查询结果,不显示日志等)

User{id=1, name='Zhang3', age='10'}
************[User{id=1, name='Zhang3', age='10'}, User{id=2, name='Li4', age='20'}, User{id=3, name='erha', age='10'}, User{id=4, name='NotUser', age='21'}, User{id=5, name='NotUser2', age='22'}]

Process finished with exit code 0

  完毕。

  

  

  

  

  

猜你喜欢

转载自www.cnblogs.com/AlleyMeowy/p/10165759.html