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共同用于输出日志,至于原理……我也没搞懂】
——————————————————————————————————————————————————————————
数据库方面,建立一张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的更多相关文章
- Mybatis笔记二:接口式编程
目录 旧方法的弊端 接口式编程 接口式编程的好处 接口式编程的增删改查 旧方法的弊端 在Mybatis笔记一中,我们使用命名空间+id的方式实现了Mybatis的执行,不过这里的命名空间是我们随便写的 ...
- MyBatis笔记一:GettingStart
MyBatis笔记一:GettingStart 1.MyBatis优点 我们的工具和各种框架的作用就是为了我们操作数据库简洁,对于一些数据库的工具能帮我们少写一些处理异常等等的代码,但是他们并不是自动 ...
- 【狂神说】JAVA Mybatis 笔记+源码
简介 自学的[狂神JAVA]MyBatis GitHub源码: https://github.com/Donkequan/Mybatis-Study 分享自写源码和笔记 配置用的 jdk13.0.2 ...
- mybatis笔记02
目录 0. 文章目录 1. Mybatis映射文件 1.1 输入映射 1.2 输出映射 1.3 resultMap 2. 动态SQL 2.1 if和where 2.2 foreach循环 2.3 sq ...
- 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二)(代码篇)
这篇是上一篇的延续: 用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 源代码在github上可以下载,地址:https://github.com/guoxia ...
- 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一)
梳理下使用spring+springMVC+mybatis 整合后的一个简单实例:输入用户的 ID,之后显示用户的信息(此次由于篇幅问题,会分几次进行说明,此次是工程的创建,逆向生成文件以及这个简单查 ...
- Mybatis笔记二
一对一查询 案例:查询所有订单信息,订单信息中显示下单人信息. 注意:因为一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用户信息为一对一查询.如果从用户信息出发查询用户下的订单信息则 ...
- MyBatis笔记二:配置
MyBatis笔记二:配置 1.全局配置 1.properites 这个配置主要是引入我们的 properites 配置文件的: <properties resource="db.pr ...
- jQuery 1.3.2 简单实现select二级联动
jQuery 1.3.2 简单实现select二级联动 复制代码代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transiti ...
- 【MyBatis笔记】mapper文件的配置以及说明
<!doctype html>[MyBatis笔记]mapper文件的配置以及说明 figure:last-child { margin-bottom: 0.5rem; } #write ...
随机推荐
- 匿名函数function前面的! ~等符号作用小解
好久没写博客了,刚过完年,给大家拜个晚年,大家新年快乐! 相信昨晚前端,很多同学应该都见过类似于: !function() {do something...}() ~function(){do som ...
- vue全选与取消全选
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 第三周学习java第四章学习总结及体会!
第三周java 2第四章的学习总结: 一.主要内容(类与对象): 1.类: 2.构造方法与对象的创建: 3.类与程序的基本结构: 4.参数传值: 5.对象的组合: 6.实例成员与类成员: 7.方法重载 ...
- 织梦,dede:list和dede:artlist的区别
dede:list可以配合pagelist进行分页,而artlsit不能进行分页. 如果要翻页只能用list的
- Spring IOC原理解读 面试必读
Spring源码解析:Bean实例的创建与初始化 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器 ...
- 安装Nginx到linux服务器(Ubuntu)详解
先去下载一个nginx放到服务器. 然后解压(可参考前面安装tomcat)编译(./configure --prefix=/usr/local/nginx/server/ && mak ...
- ambari卸载集群
#1.删除hdp.repo和hdp-util.repo cd /etc/yum.repos.d/ rm -rf hdp* rm -rf HDP* #rm -rf ambari* #2.删除安装包 #用 ...
- HDU 3861 The King’s Problem 最小路径覆盖(强连通分量缩点+二分图最大匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3861 最小路径覆盖的一篇博客:https://blog.csdn.net/qq_39627843/ar ...
- SharePoint 2013 拷贝文件夹到本地
网站--设计(小齿轮)--网站内容--文档库--打开文档库后---单击标题--库--找到下图的红色框的图标. 其名称[使用资源管理器打开] 打开后所有的操作都像资源管理器的操作方式一样
- 两个ArrayList之间求交并补
class ArraylistCalculate{ // 两个整数集求差集 public ArrayList<Integer> integerArrayListDifference( Ar ...