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 ...
随机推荐
- Vim Using
1 2 set nu 3 set backup 4 set bg=light 5 " transform tab to space 6 set expandtab 7 " auto ...
- GNU Readline 库及编程简介
用过 Bash 命令行的一定知道,Bash 有几个特性: TAB 键可以用来命令补全 ↑ 或 ↓ 键可以用来快速输入历史命令 还有一些交互式行编辑快捷键: C-A / C-E 将光标移到行首/行尾 C ...
- java多线程系类:JUC线程池:06之Callable和Future(转)
概要 本章介绍线程池中的Callable和Future.Callable 和 Future 简介示例和源码分析(基于JDK1.7.0_40) 转载请注明出处:http://www.cnblogs.co ...
- CPU中断和轮询
轮询顾名思义,CPU不停的询问,CPU很忙. 中断和轮询不同,是硬件上的,就像一个开关被按下了,没有什么东西在不停的询问开关有没有被按下,开关只是被按下了,就通电了,通电了就会发声一些事情. 可以看看 ...
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(5)--问题解决
一.[root@openstack-server ~]# nova listERROR (CommandError): You must provide a username or user id v ...
- [LeetCode] Intersection of Two Arrays II 两个数组相交之二
Given two arrays, write a function to compute their intersection. Example:Given nums1 = [1, 2, 2, 1] ...
- FineUI(专业版)v3.1发布(ASP.NET控件库)!
FineUI(专业版)v3.1 正式发布,60多项更新,官网示例多达 690 个,新增 30 个页面加载动画! 自 2008 年 4 月发布第一个版本,我们持续更新了 126 个版本,拥有 16000 ...
- JavaScript中实现extend()方法
var male = { sex: "male" }; var xiaoming = { name: "xiaoming", school: "xin ...
- 使用Hibernate的 isNotEmpty( ) 方法 报错: No result defined .... and result dataAccessFailure
数据访问失败 出错代码: cardy.add(Restrictions.isNotEmpty("grade.cardtype.cardtype")); try...catch之后发 ...
- adb devices 偵測不到 手機
現象: system 有偵測到 mobile phone, xxx@xxx-ThinkPad-T460p:~/.android$ lsusb Bus Device : ID 1d6b: Linux F ...