小白学习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共同用于输出日志,至于原理……我也没搞懂】

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

  数据库方面,建立一张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

  完毕。

  

  

  

  

  

MyBatis笔记(一) 最简单的select的更多相关文章

  1. Mybatis笔记二:接口式编程

    目录 旧方法的弊端 接口式编程 接口式编程的好处 接口式编程的增删改查 旧方法的弊端 在Mybatis笔记一中,我们使用命名空间+id的方式实现了Mybatis的执行,不过这里的命名空间是我们随便写的 ...

  2. MyBatis笔记一:GettingStart

    MyBatis笔记一:GettingStart 1.MyBatis优点 我们的工具和各种框架的作用就是为了我们操作数据库简洁,对于一些数据库的工具能帮我们少写一些处理异常等等的代码,但是他们并不是自动 ...

  3. 【狂神说】JAVA Mybatis 笔记+源码

    简介 自学的[狂神JAVA]MyBatis GitHub源码: https://github.com/Donkequan/Mybatis-Study 分享自写源码和笔记 配置用的 jdk13.0.2 ...

  4. mybatis笔记02

    目录 0. 文章目录 1. Mybatis映射文件 1.1 输入映射 1.2 输出映射 1.3 resultMap 2. 动态SQL 2.1 if和where 2.2 foreach循环 2.3 sq ...

  5. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二)(代码篇)

    这篇是上一篇的延续: 用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 源代码在github上可以下载,地址:https://github.com/guoxia ...

  6. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一)

    梳理下使用spring+springMVC+mybatis 整合后的一个简单实例:输入用户的 ID,之后显示用户的信息(此次由于篇幅问题,会分几次进行说明,此次是工程的创建,逆向生成文件以及这个简单查 ...

  7. Mybatis笔记二

    一对一查询 案例:查询所有订单信息,订单信息中显示下单人信息. 注意:因为一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用户信息为一对一查询.如果从用户信息出发查询用户下的订单信息则 ...

  8. MyBatis笔记二:配置

    MyBatis笔记二:配置 1.全局配置 1.properites 这个配置主要是引入我们的 properites 配置文件的: <properties resource="db.pr ...

  9. jQuery 1.3.2 简单实现select二级联动

    jQuery 1.3.2 简单实现select二级联动  复制代码代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transiti ...

  10. 【MyBatis笔记】mapper文件的配置以及说明

    <!doctype html>[MyBatis笔记]mapper文件的配置以及说明 figure:last-child { margin-bottom: 0.5rem; } #write ...

随机推荐

  1. 基于贝叶斯算法实现简单的分类(java)

    参考文章:https://blog.csdn.net/qq_32690999/article/details/78737393 项目代码目录结构 模拟训练的数据集 核心代码 Bayes.java pa ...

  2. linux下利用C或C++ 语言调用需要root权限的函数

    1.setuid法(1)登录root用户,将程序设置成root:root所有者(等价于:登录root用户编译程序).也可直接将普通用户加入root组中,那么编译程序不用来回切换用户.(2)登录root ...

  3. Kotlin从入门到放弃

    1.eclipse kotlin安装: http://blog.csdn.net/u014134488/article/details/50684922 2.Android Studio kotlin ...

  4. Maven的安装、配置及使用入门+maven安装报错:JAVA_HOME【申明:来源于网络】

    Maven的安装.配置及使用入门+maven安装报错:JAVA_HOME[申明:来源于网络] Maven的安装.配置及使用入门:http://www.cnblogs.com/dcba1112/arch ...

  5. 洛谷P3388 【模板】割点(割顶)

    题目背景 割点 题目描述 给出一个n个点,m条边的无向图,求图的割点. 输入输出格式 输入格式: 第一行输入n,m 下面m行每行输入x,y表示x到y有一条边 输出格式: 第一行输出割点个数 第二行按照 ...

  6. 消除 ASP.NET Core 告警 "No XML encryptor configured. Key may be persisted to storage in unencrypted form"

    在 ASP.NET Core 中如果在 DataProtection 中使用了 PersistKeysToFileSystem 或 PersistKeysToFileSystem services.A ...

  7. 安装Office2010出现MSXML版本6.10.1129.0错误

      在键盘上按“win+R”组合键出现图图示界面后,输入“regsvr32 /u msxml6.dll”,点击“确定”. 出现图示显示后,点击“确定”,并同时去试试office是否能够安装了. 如果上 ...

  8. Python 学习笔记10 函数

    函数其实一段带名字的代码段,我们可以根据代码段,重复执行某一段代码段,或者有条件的执行某一段代码段. 将一段代码定义成函数后,我们可以很方便的根据自己的需求,随时调用该代码段.遇到需求变化的时候,只需 ...

  9. Flask(python)异步(ajax)返回json格式数据

    主要讨论两个问题,第一个是关于json.dumps 与jsonify区别,第二个是几种异步的区别(见jQuery中的$.getJSON.$.ajax.$.get.$.post的区别). json.du ...

  10. 使用tortoisegit工具git地址中带号码密码的拉取,以及使用这种方式后中途重置密码报git remote: HTTP Basic: Access denied 错误解决办法

    1. 在拉取git项目时可以在地址中直接指定号码密码如下就可以直接拉取下来 https://username:password@github.com   需要注意,因为在解析地址时是以@符号作为地址信 ...