1 Mybatis
1 使用Maven导入mybatis依赖
在pom.xml中写上一下代码:这些代码的查找可在https://mvnrepository.com/open-source网站上寻找,导入mybatis时要注意导入mysql还有版本的控制做到相适应。
<dependencies>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
有一点要注意的是mysql在6.0以上版本有改动优化,因为视频中出现的是2017年所以遵守视频中的版本。
2 mybatis开发流程
创建配置mybatis-config.xml配置文件-->>>创建db.properties配置文件配置数据库参数--->>>创建实体类--->>>在resource中创建mapper文件夹并在下面创建usersMapper.xml映射文件,在里面编写查询语句--->>>创建监听器和sqlSession工具类--->>>创建UsesDao编写查询方法--->>>创建Servlet编写增删改查。整体结构如下图所示

3 动态SQL语句
在userMapper.xml文件中编写的sql代码:
<!--
mapper 用于定义一个映射配置文件的根节点
namespace属性是用来配置命名空间,主要进行session级别的缓存管理
命名空间默认情况下,使用我们当前操作的实体类的全路径
-->
<mapper namespace="cn.uestc.entity.Users">
<select id="findUsers" resultType="cn.uestc.entity.Users">
select * from users
</select>
<select id="findById" resultType="cn.uestc.entity.Users">
select * from users where id = #{id}
</select>
</mapper>
在UsersDAO中相对映:通过相匹配select中的id来匹配具体调用哪一个查询语句
public List<Users> findAll() {
try {
list = getSession().selectList("findUsers");
} catch (Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
return list;
}
/**
* 查询单个用户根据编号
* @return
*/
public Users findById(Integer id) {
try {
user = getSession().selectOne("findById", id);
} catch (Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
return user;
}
但这样做有很大的局限性,当我们要查询的情况发生改变时就要增加一个查询语句,当要查询的情况比较多时查询语句也会不断的增加,这样使得代码越来越难以管理,因此推出动态SQL语句使得查询语句可以动态发生改变。下面一段代码就直接代替了上面的两种查询情况:
<mapper namespace="cn.uestc.entity.Users">
<select id="findUsers" resultType="cn.uestc.entity.Users">
select * from users
<if test="id != null">
where id = #{id}
</if>
</select>
</mapper>
此时要注意#{id}有两种获取方法:HashMap和JavaBean,当select中的id和查询方法一对应时是通过map集合获取的,但在此时一个id="findUsers"对应着两个不同的方法那么此时就无法通过map集合获得了而要通过JavaBean,但在实体类中已经有id的get、set方法为什么不对那,那是因为在传递参数的时候直接传入了id,而采用JavaBean获取值时是通过对象获得的,即namespace中的对象类型,也就意味着此时要传递一个对象方可,那么有两种方法:
public Users findById(Integer id) {
user.setId(id);
try {
user = getSession().selectOne("findUsers", user);
} catch (Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
return user;
}
或者 上面一种方法需要先new 一个对象但是不用再创建构造方法,下面的方法直接利用有参构造,需要先有对应的构造方法
public Users findById(Integer id) {
user.setId(id);
try {
user = getSession().selectOne("findUsers", new Users(id));
} catch (Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
return user;
}
0
1 Mybatis的更多相关文章
- 【分享】标准springMVC+mybatis项目maven搭建最精简教程
文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...
- Java MyBatis 插入数据库返回主键
最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User ...
- [原创]mybatis中整合ehcache缓存框架的使用
mybatis整合ehcache缓存框架的使用 mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓 ...
- 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程
本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...
- mybatis plugins实现项目【全局】读写分离
在之前的文章中讲述过数据库主从同步和通过注解来为部分方法切换数据源实现读写分离 注解实现读写分离: http://www.cnblogs.com/xiaochangwei/p/4961807.html ...
- MyBatis基础入门--知识点总结
对原生态jdbc程序的问题总结 下面是一个传统的jdbc连接oracle数据库的标准代码: public static void main(String[] args) throws Exceptio ...
- Mybatis XML配置
Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...
- MyBatis源码分析(一)开篇
源码学习的好处不用多说,Mybatis源码量少.逻辑简单,将写个系列文章来学习. SqlSession Mybatis的使用入口位于org.apache.ibatis.session包中的SqlSes ...
- (整理)MyBatis入门教程(一)
本文转载: http://www.cnblogs.com/hellokitty1/p/5216025.html#3591383 本人文笔不行,根据上面博客内容引导,自己整理了一些东西 首先给大家推荐几 ...
- MyBatis6:MyBatis集成Spring事物管理(下篇)
前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基 ...
随机推荐
- Kubernetes---网络通讯模式笔记
⒈kubernetes网络通讯模式 Kubernetes的网络模型假定了所有Pod都在一个可以直接连通的扁平的网络空间中,这在GCE(Google Compute Engine)里面是现成的网 ...
- .Net Core 3.0原生Json解析器
微软官方博客中描述了为什么构造了全新的Json解析器而不是继续使用行业准则Json.Net 微软博客地址:https://devblogs.microsoft.com/dotnet/try-the-n ...
- spring mvc 简单实现及相关配置实现
配置文件 actio.xml <?xml version="1.0" encoding="UTF-8"?> <controller> & ...
- 数值分析-Legendre正交多项式 实现函数逼近
数值分析-Legendre正交多项式 实现函数逼近 2016年12月18日 21:27:54 冰三点水 阅读数 4057 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请 ...
- JS基础_对象的方法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- LeetCode 腾讯精选50题--2的幂
在二进制中,2的幂的数字用二进制表示时只会有一位表示为1,其余都为0,基于这个前提,可以有两种方案: 1. 做位移操作 2. 与数值取反并与原数值做与操作,判断是否与原来的数值相同 对于方案1,我的想 ...
- 【温故知新】php 魔术方法
<?php class Magic{ private $name; /** *构造方法,在类被实例化时自动调用,一般用于初始化操作 */ public function __construct( ...
- asp.net 简单的身份验证
1 通常我们希望已经通过身份验证的才能够登录到网站的后台管理界面,对于asp.net 介绍一种简单的身份验证方式 首先在webconfig文件中添加如下的代码 <!--身份验证--> &l ...
- Google自动打印
浏览器打印功能,有很多小伙伴可能不太清楚,这里我们可以学习一下. 情景:开发一个需要打印小票的项目.(在订单页里,给客户添加一个打印的操作) 1.假设打印机已经连接好了 2.我们这一节用的浏览器是Go ...
- Python-memcached的使用用法
Memcached API set(key,val,time=0,min_compress_len=0) 无条件键值对的设置,其中的time用于设置超时,单位是秒,而min_compress_len则 ...