初学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编译器看一看,我相信不管是新人还是老人 入门总 ...
随机推荐
- 环境jdk、编码不一致造成的项目报错
一个项目在eclipse 中可以运行 , 到另一个eclipse 中不能运行,多是因为jdk过低.包没有引人.环境jdk.编码不一致造成的.或者是因为编译文件在另一个环境里跟JDK等 不匹配. 解决办 ...
- icon-font与svg
icon font 使用与svg应用分享 icon font 字体概述 css3增加了@font-face属性,传统的浏览器是通过font-family来设置字体,如果系统里没有的话就用其它字体来代替 ...
- RHEL 6.5 PXE 安装调试 VMWARE ESXi 5.1 安装
测试环境:win10/vmware workstation 12 pro 操作系统:RHEL 6.5(PXE服务器) [2016.11.30] [遗留问题] 1.ks.cfg通过本地文件方式加载不成功 ...
- 【图像处理】【SEED-VPM】4.串口调试信息
—————————————————————————————————————————————————————————————————————— 串口返回正确的信息 Booting PSP Boot Lo ...
- Ubuntu上安装MySql过程,以及遇到的一些问题
今天在Ubuntu服务器上安装MySql的时候遇到了一些问题,记录下来,以防以后忘记. 安装环境:Ubuntu14.04 安装命令: //安装Mysal服务端//会提示输入root密码 sudo ap ...
- C# 进程和线程
一.进程和线程 进程是对一段静态指令序列的动态执行过程,是系统进行资源分配和调度的基本单位.与进程相关的信息包括进程的用户标志.正在执行的已经编译好的程序.程序和数据在存储器中的位置等.同一个进程有可 ...
- C学习
\a:警报 1.exit(),提前结束程序.include <stdlib.h> 2.getch()无缓存.getchar()有缓存,多条连用时注意末尾换行符否则始终.putchar(). ...
- CSS-position详解
position属性 position属性可以调整DOM元素在浏览器中的位置,能够很好的体现HTML普通流这个特征.重点在于应用了不同的position值之后是否有脱离普通流和改变Display属性这 ...
- Mysql数据库的一些命令_LInux
查看当前数据库的版本,因为有些命令在不同版本中 用法有可能不一样,注意 -V 是大写字母V[root@localhost ~]# mysqladmin -Vmysqladmin Ver 8.42 D ...
- tcp的简单介绍
为什么会有TCP/IP协议 在 世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人 的口音,让他们无法合作 ...