Mybatis框架的模糊查询(多种写法)、删除、添加(四)
学习Mybatis这么多天,那么我给大家分享一下我的学习成果。从最基础的开始配置。
一、创建一个web项目,看一下项目架构

二、说道项目就会想到需要什么jar

三、就是准备大配置链接Orcl数据库
<?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> <!-- 别名的定制 -->
<typeAliases>
<!-- 按类型名定制别名 -->
<!-- <typeAlias type="cn.happy.entity.Student" alias="Student"/> --> <!-- 拿当前指定包下的简单类名作为别名 -->
<package name="cn.happy.entity"/>
</typeAliases> <environments default="development">
<environment id="development">
<!-- 使用jdbc的事务 -->
<transactionManager type="JDBC" />
<!-- 使用自带的连接池 -->
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="username" value="T2" />
<property name="password" value="T2" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="cn/happy/dao/StudentDAO.xml" />
</mappers>
</configuration>
四、准备小配置
<?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="cn.happy.dao.IStudentDAO">
//增删改
</mapper>
五、准备工具类
package cn.happy.util; import java.io.IOException;
import java.io.Reader; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; /**
* 工具类
* @author Happy
*
*/
public class MybatisUtil {
private static String config="mybatis-config.xml";
static Reader reader;
static{
try {
reader= Resources.getResourceAsReader(config);
} catch (IOException e) {
e.printStackTrace();
}
}
private static SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
//提供一个可以获取到session的方法
public static SqlSession getSession() throws IOException{ System.out.println("22222"+factory);
//弊病,就是工厂是
// 1.1 openSession到底做了什么
SqlSession session = factory.openSession();
System.out.println("3333");
return session;
}
}
六、准备实体类
package cn.happy.entity; import java.util.Date; /**
* 学生实体类
* @author Happy
*
*/
public class Student {
private Integer stuno;
private String stuname;
private Integer stuage;
private Date studate; public String toString() {
return "Student [stuno=" + stuno + ", stuname=" + stuname + ", stuage="
+ stuage + ", studate=" + studate + "]";
}
public Integer getStuno() {
return stuno;
}
public void setStuno(Integer stuno) {
this.stuno = stuno;
}
public String getStuname() {
return stuname;
}
public void setStuname(String stuname) {
this.stuname = stuname;
}
public Integer getStuage() {
return stuage;
}
public void setStuage(Integer stuage) {
this.stuage = stuage;
}
public Date getStudate() {
return studate;
}
public void setStudate(Date studate) {
this.studate = studate;
} }
七、下面是具体的代码增删改查前面是公用的
(一)下面实现查看所有
1在接口定义方法
//查询所有记录
public List<Student> findAll() throws IOException;
2在配置中=======>由于动态加载所以不需要实现类
<!-- 查询所有 -->
<select id="findAll" resultType="Student">
select * from student
</select>
3测试类中
IStudentDAO dao;
@Before
public void initData() throws IOException{
SqlSession session = MybatisUtil.getSession();
//动态踢出实现类
//首先要改StudentDAO.xml改成<mapper namespace="cn.happy.dao.IStudentDAO">
dao=session.getMapper(IStudentDAO.class);
}
/**
* selectALl学生
* @throws IOException
*/ @Test
public void findAll() throws IOException{
List<Student> list = dao.findAll();
for (Student student : list) {
System.out.println(student.getStuname());
} }
(二)下面是添加
1在接口定义方法
//添加
public int addStu(Student stu) throws IOException;
2在配置中=======>由于动态加载所以不需要实现类
<insert id="insertStudent" parameterType="Student" >
insert into student(stuname,stuage,studate) values(#{stuname},#{stuage},#{studate}) <!-- sqlserver 和Mysql 只有自自增 自增时机和insert时机: 先insert返回自增值 Oracle先产生一个自增值,然后再执行insert
-->
<selectKey keyProperty="stuno" resultType="int">
<!-- Mysql的 -->
select @@identity
<!-- orcl的 -->
select sql_num.currval from dual
</selectKey> </insert>
3测试类中
@Test
public void testAdd() throws IOException{
Student stu=new Student();
stu.setStuname("Y2161好人");
stu.setStuage(21);
stu.setStudate(new Date()); System.out.println("添加前======="+stu); IStudentDAO dao=new StudentDAOImpl();
dao.addStu(stu); System.out.println("添加后======="+stu); }
(二)下面是删除
1在接口定义方法
//删除
public int delStu(int id) throws IOException;
2在配置中=======>由于动态加载所以不需要实现类
<!--删除学生 -->
<delete id="delStudent">
delete from student where stuno=#{xxx}<!-- #{xxx}随便写,起到一个占位的作用 -->
</delete>
3测试类中
/**
* 删除学生
* @throws IOException
*/ @Test
public void delStudent() throws IOException{
dao.delStu(2);
System.out.println("ok");
}
(二)下面是模糊查询
1在接口定义方法
//按照学生姓名查询学生集合(一个是实体一个是字符串其实都可以)
public List<Student> findStudntByName(Student stu) throws IOException;
public List<Student> findStudntByName(String stuname) throws IOException;
2在配置中=======>由于动态加载所以不需要实现类
<!--模糊查询 mysql的数据库 -->
<select id="findStudentByName" resultType="Student">
<!-- select * from student where stuname like concat('%',#{stuname},'%') -->
select * from student where stuname like '%${value}%'
</select>
3测试类中
/**
* 模糊查询
* @throws IOException
*/ @Test
public void findStudentByName() throws IOException{ /*Student stu=new Student();
stu.setStuname("人");*/
List<Student> list = dao.findStudntByName("人");
for (Student student : list) {
System.out.println(student.getStuname());
} }
Mybatis框架的模糊查询(多种写法)、删除、添加(四)的更多相关文章
- Mybatis注解开发模糊查询
Mybatis注解开发模糊查询 一般在使用mybatis时都是采用xml文件保存sql语句 这篇文章讲一下在使用mybatis的注解开发时,如何进行模糊查询 模糊查询语句写法(在@Select注解中) ...
- StackExchange.Redis加载Lua脚本进行模糊查询的批量删除和修改
前言 使用StackExchange.Redis没有直接相关的方法进行模糊查询的批量删除和修改操作,虽然可以通过Scan相关的方法进行模糊查询,例如:HashScan("hashkey&qu ...
- Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办--转自http://www.jb51.net/article/88236.htm
这篇文章主要介绍了Mybatis使用MySQL模糊查询时输入中文检索不到结果的解决办法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 项目开发中,在做Mybatis动态查询时,遇到了 ...
- TP框架中模糊查询实现
TP框架中模糊查询实现 $where['g.name'] = array('like','%'.$groupname.'%'); 表达式查询 上面的查询条件仅仅是一个简单的相等判断,可以使用查询表达式 ...
- 8.mybatis动态SQL模糊查询 (多参数查询,使用parameterType)
多参数查询,使用parameterType.实例: 用户User[id, name, age] 1.mysql建表并插入数据 2.Java实体类 public class User { public ...
- Mybatis中的模糊查询
今天下午做的一个功能,要用到模糊查询,字段是description,刚开始我的写法用的是sql中的模糊查询语句, 但是这个有问题,只有将字段的全部值传入其中,才能查询,所以不是迷糊查询. 后来经过搜索 ...
- stark组件的分页,模糊查询,批量删除
1.分页组件高阶 2.整合展示数据showlist类 3.stark组件之分页 3.stark组件之search模糊查询 4.action批量处理数据 4.总结 1.分页组件高阶 1.分页的class ...
- mybatis 框架 的应用之二(批量添加、实现分页查询)
lf-driver=com.mysql.jdbc.Driver lf-url=jdbc:mysql://localhost:3306/test lf-user=LF lf-password=LF &l ...
- 优化mybatis框架中的查询用户记录数的案例
通过对mybatis框架的中核心接口和类的分析,发现之前写的那个小demo是有问题的.现在对其进行部分优化. 如果存在多个功能的时候,势必会有很多重复的代码,如,创建sqlsession对象,关闭sq ...
随机推荐
- 【JQ基础】数组
each() 方法规定为每个匹配元素规定运行的函数.
- BPM配置故事之案例5-必填与水印文本
物资申请表改好了,但是没过两天老李又找来了. 老李:这个表格每次都是各个部门发给我们,再由我们采购部来填,太影响效率了,以后要让他们自己填. 小明:那就让他们填呗,他们有权限啊. 老李:可是他们说不会 ...
- iOS 原生地图地理编码与反地理编码
当我们要在App实现功能:输入地名,编码为经纬度,实现导航功能. 那么,我需要用到原生地图中的地理编码功能,而在Core Location中主要包含了定位.地理编码(包括反编码)功能. 在文件中导入 ...
- 参数探测(Parameter Sniffing)影响存储过程执行效率解决方案
如果SQL query中有参数,SQL Server 会创建一个参数嗅探进程以提高执行性能.该计划通常是最好的并被保存以重复利用.只是偶尔,不会选择最优的执行计划而影响执行效率. SQL Server ...
- Unity C#最佳实践(上)
本文为<effective c#>的读书笔记,此书类似于大名鼎鼎的<effective c++>,是入门后提高水平的进阶读物,此书提出了50个改进c#代码的原则,但是由于主要针 ...
- 在CentOS上构建.net自动化编译环境
我们知道在Windows上我们很容易构建于MSBuild的自动化编译环境,那么在CentOS也是可以的,主要是需要Mono. 在这儿我们选择Jenkins+Gitlab+Mono在C ...
- 【腾讯Bugly干货分享】基于RxJava的一种MVP实现
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57bfef673c1174283d60bac0 Dev Club 是一个交流移动 ...
- 【腾讯Bugly干货分享】微信终端跨平台组件 Mars 系列 - 我们如约而至
导语 昨天上午,微信在广州举办了微信公开课Pro.于是,精神哥这两天的朋友圈被小龙的"八不做"刷屏了.小伙伴们可能不知道,下午,微信公开课专门开设了技术分论坛.在分论坛中,微信开源 ...
- 打造TypeScript的Visual Studio Code开发环境
打造TypeScript的Visual Studio Code开发环境 本文转自:https://zhuanlan.zhihu.com/p/21611724 作者: 2gua TypeScript是由 ...
- 虚拟机体验之 Xen 篇 —— 令人脑洞大开的奇异架构
这一篇我要体验的虚拟机系统是 Xen.在虚拟机领域,Xen 具有非常高的知名度,其名字经常在各类文章中出现.同时 Xen 也具有非常高的难度,别说玩转,就算仅仅只是理解它,都不是那么容易.之所以如此, ...