MyBatis入门案例
1.案例架构

2.引入jar 包

3.书写配置文件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>
4.创建实体类 Student
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 + "]";
}
}
5.创建学生的Dao以及Dao的实现
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;
}
}
6.书写StudentDao的配置文件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>
7.工具类:用于获取SqlSession对象 SqlSessionUtil
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();
}
}
}
8.测试类:
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);
}
}
}
MyBatis入门案例的更多相关文章
- MyBatis入门案例、增删改查
一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...
- MyBatis入门案例 增删改查
一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...
- Mybatis入门案例中设计模式的简单分析
Talk is cheap, show me the code! public class TestMybatis { public static void main(String[] args) t ...
- mybatis入门案例自定义实现
mybatis入门案例自定义实现 一.需要实现的类和接口 public static void main(String[] args) throws Exception{ //1.读取配置文件 Inp ...
- mybatis入门案例分析
mybatis入门案例分析 一.设计模式分析 public class MybatisTest { public static void main(String[] args) throws Exce ...
- 03 Mybatis:01.Mybatis课程介绍及环境搭建&&02.Mybatis入门案例
mybatis框架共四天第一天:mybatis入门 mybatis的概述 mybatis的环境搭建 mybatis入门案例 -------------------------------------- ...
- intellij IDEA Mybatis入门案例
最近打算学习ssm框架 Mybatis 作为入门的第一个持久层框架,学习起来实在费劲.故写此文章作为入门案例. 先打开 IDEA建立一个Maven项目,目录结构如下: 源代码已经上传至GitHub ...
- 一、mybatis入门案例
今天学习了mybatis框架,简单记录一下mybatis第一个入门案例,目标是使用Mybatis作为持久层框架,执行查询数据的SQL语句并且获取结果集 基本步骤: 物理建模 逻辑建模 引入依赖 创建持 ...
- 阶段3 1.Mybatis_02.Mybatis入门案例_1.mybatis的入门
H:\BaiDu\黑马传智JavaEE57期 2019最新基础+就业+在职加薪\讲义+笔记+资料\主流框架\31.会员版(2.0)-就业课(2.0)-Mybatis\mybatis\mybatis_d ...
随机推荐
- python flask (一)
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World ...
- http status 301/302 & java重定向/转发
一.301/3021.什么是301转向?什么是301重定向? 301转向(或叫301重定向,301跳转)是当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header) ...
- javascript中的闭包
闭包一直是javascript中的难点,也比较不容易被初学者所掌握,"官方"的解释是:所谓"闭包",指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是 ...
- CMakeList.txt/Clion中添加头文件和库
cmake_minimum_required(VERSION 3.6) project(capi_lua) include_directories(/usr/include) find_library ...
- JavaScript子窗口调用父窗口变量和函数的方法
在做一个父窗口开启子窗口并且在子窗口关闭的时候调用父窗口的方法,达到局部刷新的目的. 父窗口: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...
- 编写轻量ajax组件03-实现(附源码)
前言 通过前两篇的介绍,我们知道要执行页面对象的方法,核心就是反射,是从请求获取参数并执行指定方法的过程.实际上这和asp.net mvc框架的核心思想很类似,它会解析url,从中获取controll ...
- 理解"熵"
熵描述了事物的混乱程度 一个变量x,它的可取值为x1,x2,x3,x4.当它取值为这几个值时,概率分别为p1,p2,p3,p4.那么这个混乱程度就可以描述为f(p1,p2,p3,p4). 二元取值时熵 ...
- 《UNIX环境高级编程》笔记——3.文件IO
一.引言 说明几个I/O函数:open.read.write.lseek和close,这些函数都是不带缓冲(不带缓冲,只调用内核的一个系统调用),这些函数不输入ISO C,是POSIX的一部分: 多进 ...
- Android Hook技术
原文:http://blog.csdn.net/u011068702/article/details/53208825 附:Android Hook 全面入侵监听器 第一步.先爆项目demo照片,代码 ...
- MyBatis 延迟加载,一级缓存,二级缓存设置
什么是延迟加载 resultMap中的association和collection标签具有延迟加载的功能. 延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息.使用关联信息时再去加载关联信息 ...