初学My Batis之入门
MyBatis(百度百科):
下面我们来做第一个入门案例:
架构:
jar包:
我们创建一个学生实体类
package cn.entity;
/**
* 学生实体类
* @author hyj
*
*/
public class Student {
private Integer id;//编号
private Integer age;//年龄
private String name;//姓名
public Student() {
}
public Student(Integer id, Integer age, String name) {
super();
this.id = id;
this.age = age;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student [id=" + id + ", age=" + age + ", name=" + name + "]";
} }
配置DAO和DAOImpl实现类
package cn.dao; import java.io.IOException;
import java.util.List; import cn.entity.Student; /**
* 学生的dao
* @author hyj
*
*/
public interface StudentDao {
/**
* 保存学生
* @param stu 学生对象
* @return 受影响行数
* @throws IOException
*/
int save(Student stu) throws IOException; /**
* 根据id删除学生信息
* @param id
* @return
*/
int delete(Integer id); /**
* 查看学生列表
* @return
*/
List<Student> studentList(); /**
* 根据学生姓名模糊查询学生信息
* @param name
* @return
*/
List<Student> byNameList(String name); /**
* 根据学生对象模糊查询学习姓名
* @param stu
* @return
*/
List<Student> byNameList(Student stu); /**
* 更新学生信息
* @param stu
* @return
*/
int updateStudent(Student stu); }
package cn.dao.impl; import java.io.IOException;
import java.io.Reader;
import java.util.List; 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 org.junit.Before; import cn.dao.StudentDao;
import cn.entity.Student;
import cn.util.SqlSessionUtil; /**
* 学生的dao实现类
*
* @author hyj
*
*/
public class StudenDaoImpl implements StudentDao { SqlSession session = SqlSessionUtil.getSqlSession(); /**
* 添加学生信息
*/
@Override
public int save(Student stu) throws IOException {
int result = session.insert("insertStudent", stu);
// 提交事务
session.commit();
SqlSessionUtil.closeSqlSession();
return result; } /**
* 根据id删除学生信息
*/
@Override
public int delete(Integer id) {
int result = session.delete("deletStudent", id);
session.commit();
SqlSessionUtil.closeSqlSession();
return result;
} /**
* 查询学生列表
*
* @return
*/
@Override
public List<Student> studentList() {
List<Student> students = session.selectList("studentlist");
SqlSessionUtil.closeSqlSession();
return students;
} /**
* 根据学生姓名模糊查询学生列表:传入的参数是普通字符串
*/
@Override
public List<Student> byNameList(String name) {
List<Student> students = session.selectList("byName", name);
SqlSessionUtil.closeSqlSession();
return students;
} /**
* 根据学生对象模糊查询学生列表:传入的参数对象
*/
@Override
public List<Student> byNameList(Student stu) {
List<Student> students = session.selectList("byStu", stu);
SqlSessionUtil.closeSqlSession();
return students;
} /**
* 更新学生信息
*/
@Override
public int updateStudent(Student stu) {
int result = session.update("updatestu", stu);
session.commit();
SqlSessionUtil.closeSqlSession();
return result;
} }
给Dao配置俗话中讲的小配置(StudentDAO.xml)
<?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.dao">
<!-- 添加一条学生记录 -->
<insert id="insertStudent" parameterType="student">
insert into
student(id,age,name) values(id.nextval,#{age},#{name})
<!-- 自增列的值 -->
<selectKey
keyProperty="id" resultType="int">
SELECT ID.Nextval as ID from DUAL
</selectKey>
</insert> <!-- 根据id删除学生记录 -->
<delete id="deletStudent">
delete from student where id=#{value}
</delete> <!-- 查询所有学生记录 -->
<select id="studentlist" resultType="student">
select * from student
</select>
<!-- 更新学生信息 -->
<update id="updatestu" parameterType="student">
update student set age=#{age},name=#{name} where id=#{id}
</update>
<!-- 模糊查询 当入参是普通字符串时 -->
<select id="byName" resultType="student">
select * from student where name like concat('%',#{name},'%')
<!-- 方式一 -->
<!-- select * from student where name like '%${value}%' -->
<!-- select * from student where name like concat('%',#{name},'%') -->
</select>
<!-- 模糊查询 当入参是对象时 -->
<select id="byStu" resultType="student">
<!-- 方式一 -->
<!-- select * from student where name like '%${name}%' -->
<!-- 方式二 -->
select * from student where name like concat('%',#{name},'%')
</select>
</mapper>
接下来我们配置My batis的配置文件(mybatis-config.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>
<!-- 设置别名 -->
<typeAliases>
<!-- 通过package, 可以直接指定package的名字, mybatis会自动扫描你指定包下面的javabean, 并且默认设置一个别名,默认的名字为:
javabean 的首字母小写的非限定类名来作为它的别名 -->
<!-- type指的是javabean的完全限定名 alias就是指代别名 -->
<!-- <typeAlias alias="student" type="cn.entity.Student" /> -->
<package name="cn.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="test" />
<property name="password" value="test" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="cn/dao/StudentDAO.xml" />
</mappers>
</configuration>
我们把创建Session提到一个工具类中也就是我们的Util类
package cn.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; /**
* 这个工具类主要用来创建sqlsession对象
* @author hyj
*
*/
public class SqlSessionUtil {
//定义reader对象
static Reader reader;
static SqlSessionFactory sqlSessionFactory;
static SqlSession sqlsession;
//静态代码初始化给reader,sessionFactory初始化
static{
try {
reader=Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取SqlSession对象
* @return SqlSession对象
*/
public static SqlSession getSqlSession(){
sqlsession=sqlSessionFactory.openSession();
return sqlsession;
} /**
* 关闭sqlsession
*/
public static void closeSqlSession(){
if(sqlsession!=null){
sqlsession.close();
}
}
}
最后我们使用测试类测试即可
package cn.test; import java.io.IOException;
import java.util.List; import org.junit.Before;
import org.junit.Test; import cn.dao.StudentDao;
import cn.dao.impl.StudenDaoImpl;
import cn.entity.Student; public class StudentTest {
StudentDao sd; @Before
public void before() {
// 创建Studentdao对象
sd = new StudenDaoImpl();
} /**
* 添加学生信息
*
* @throws IOException
*/
@Test
public void addTest() throws IOException {
// 创建学生对象
Student stu = new Student();
stu.setAge(20);
stu.setName("笑话");
System.out.println("保存前:\n"+stu);
// 调用dao保存
int save = sd.save(stu);
System.out.println("保存后:\n"+stu);
System.out.println("保存成功");
} /**
* 删除学生信息
*
* @throws IOException
*/
@Test
public void deleteTest() throws IOException {
// 调用dao保存
int save = sd.delete(2);
System.out.println("删除成功");
} /**
* 查看学生列表
*/
@Test
public void studentList() {
List<Student> studentList = sd.studentList();
for (Student student : studentList) {
System.out.println(student);
}
} /**
* 更新学生信息
*/
@Test
public void updateStudent() {
Student stu = new Student();
stu.setAge(99);
stu.setName("呵呵");
stu.setId(5);
int result = sd.updateStudent(stu);
System.out.println("更新成功"+result);
} /**
* 根据学生姓名模糊查询学生列表:当传递的参数是普通类型时
*/
@Test
public void byNameList() {
List<Student> studentList = sd.byNameList("1");
for (Student student : studentList) {
System.out.println(student);
}
} /**
* 根据学生对象模糊查询学生列表:当传递的参数是对象时
*/
@Test
public void byStuList() {
// 创建学生对象
Student stu = new Student();
stu.setName("1");
List<Student> studentList = sd.byNameList(stu);
for (Student student : studentList) {
System.out.println(student);
}
} }
这就是我们的入门案例
初学My Batis之入门的更多相关文章
- 一:My Batis快速入门
---恢复内容开始--- 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检 ...
- 【ADO.NET--MVC】初学MVC(MVC入门)(1)
最近一直在学MVC,本来今天想开始做项目了,但是一下手才发现还有好多好多都不懂,虽然想照搬别人的模板,但是还是觉得很虚,这也不懂哪也不懂.看来学习一门技术断不是那么简单,只要随便套套模板,看看别人代码 ...
- TensorFlow学习——入门篇
本文主要通过一个简单的 Demo 介绍 TensorFlow 初级 API 的使用方法,因为自己也是初学者,因此本文的目的主要是引导刚接触 TensorFlow 或者 机器学习的同学,能够从第一步开始 ...
- Linux多线程编程小结
Linux多线程编程小结 前一段时间由于开题的事情一直耽搁了我搞Linux的进度,搞的我之前学的东西都遗忘了,非常烦躁的说,如今抽个时间把之前所学的做个小节.文章内容主要总结于<Linux程序 ...
- WCF服务使用(IIS+Http)和(Winform宿主+Tcp)两种方式进行发布
1.写在前面 刚接触WCF不久,有很多地方知其然不知其所以然.当我在[创建服务->发布服务->使用服务]这一过程出现过许多问题.如客户端找不到服务引用:客户端只在本机环境中才能访问服务,移 ...
- MFC学习笔记1---准备工作
什么是MFC MFC,全称Microsoft Foundation Classes,微软基础类库,顾名思义,是微软的攻城狮们将一些常用的基础的Windows API 函数用C++的形式封装成类,简化程 ...
- python介绍(变量,if,while)
python介绍(变量,if,while): python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹 打发时间,决心开发一个新 ...
- Linux学习日志第一天——基础命令①
文章目录 前言 命令的作用及基本构成 关于路径 命令 ls (list) 命令 pwd (print working directory) 命令cd (change directory) 命令 mkd ...
- vue新手入门指导,一篇让你学会vue技术栈,本人初学时候的文档
今天整理文档突然发现了一份md文档,打开一看 瞬间想起当年学习vue的艰难路,没人指导全靠自己蒙,下面就是md文档内容,需要的小伙伴可以打开个在线的md编译器看一看,我相信不管是新人还是老人 入门总 ...
随机推荐
- TextMate 通用快捷键
原来一直在Windows上使用notepad++文本编辑器,现在换了MAC,发现notepad++ 官方没有MAC版本的,在MAC上使用也有办法,只不过实在是太麻烦了. 通过查看网友的建议,发现了Te ...
- MVC5+EF6 入门完整教程十一:细说MVC中仓储模式的应用
摘要: 第一阶段1~10篇已经覆盖了MVC开发必要的基本知识. 第二阶段11-20篇将会侧重于专题的讲解,一篇文章解决一个实际问题. 根据园友的反馈, 本篇文章将会先对呼声最高的仓储模式进行讲解. 文 ...
- IO 相关配置参数
INNODB I/O相关配置 记录日志为顺序I/O,刷新日志到数据文件为随机操作.顺序操作性能快于随机IO. innodb_log_file_size innodb_log_files_in_grou ...
- Mongodb插入记录
Mongodb下文档的数据结构和JSON基本一样. 所有存储在集合中的数据都是BSON格式. BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON. 插入文档 MongoDB ...
- python之路:Day8-Socket编程进阶
本节内容: 1.Socket语法及相 2.SocketServer实现多并发 Socket语法及相关 socket概念 socket本质上就是在两台网络互通的电脑之间,建立一个通道,两台电脑通过 ...
- vpn是什么?手机vpn是什么?
vpn是什么?手机vpn是什么? vpn是什么?手机vpn是什么? vpn是什么?手机vpn是什么?VPN全称是Virtual Private Network,也就是虚拟专用网的意思.很多人不知道VP ...
- ROS语音交互(四)接入图灵语义理解
首先程序中会用到Json,curl 安装相应的库 $ sudo apt-get install libcurl3 libcurl4-openssl-dev$ sudo apt-get install ...
- Apriori on MapReduce
Apiroi算法在Hadoop MapReduce上的实现 输入格式: 一行为一个Bucket 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 34 36 38 ...
- 百度前端技术学院2015JavaScript基础部分实现自己的小型jQuery
// 实现一个简单的Query function $(selector) { ); if (firstChar == "#") { var len = selector.split ...
- c语言操作一维数组-3
C语言选择题#includemain(){double a[15],k;k=fun(a);} 则以下选项中错误的fun函数首部是 ( D)A.double fun(double a[15]) B.do ...