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爬虫学习(11) —— 也写个AC自动机
0. 写在前面 本文记录了一个AC自动机的诞生! 之前看过有人用C++写过AC自动机,也有用C#写的,还有一个用nodejs写的.. C# 逆袭--自制日刷千题的AC自动机攻克HDU OJ HDU 自 ...
- [LeetCode] Kth Largest Element in an Array 数组中第k大的数字
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...
- 【6年开源路】FineUI家族今日全部更新(FineUI + FineUI3to4 + FineUI.Design + AppBox)!
刚才询问博客园团队: [6年开源路]三石今日送福利,AppBox4.0源码免费拿!FineUI家族今日全部更新(FineUI + FineUI3to4 + FineUI.Design + AppBox ...
- iOS事件传递->处理->响应
前言: 按照时间顺序,事件的生命周期是这样的: 事件的产生和传递(事件如何从父控件传递到子控件并寻找到最合适的view.寻找最合适的view的底层实现.拦截事件的处理)->找到最合适的view后 ...
- POJ 3204 Ikki's Story I - Road Reconstruction
Ikki's Story I - Road Reconstruction Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 7 ...
- Leetcode 16. 3Sum Closest
Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...
- [半转]1px边框 移动端
半转的意思是借鉴参考,搬砖,加了一些自己的想法. 在移动端里,因为存在2倍像素的问题,所以很多时候,移动端上的1px边框并不是意义上的.从下图红色框看到dpr:2.0 ,表示1px等于2倍的物理像素. ...
- MVC5知识点记录
IIS/ASP.NET管道 原理永远是重中之重,所以在开篇的地方,先了解一下地址栏输入网址回车之后的故事. 不同IIS版本处理请求也不一样 IIS5 IIS 5.x 运行在进程InetInfo.exe ...
- shell脚本自动拉起启动程序
一.我们先看看编写的shell脚本的内容,该shell的作用主要是实现监控某个程序崩溃之后就自动重启该进程. while true do procnum=` ps -ef|grep "tes ...
- MapControl图层删除或添加触发监听事件
监听MapControl中对于图层添加和删除的事件 IActiveViewEvents_Event m_MapActiveViewEvents = m_mapControl.Map as IActiv ...