05_ssm基础(一)之mybatis简单使用
01.mybatis使用引导与准备
1.ssm框架
指: sping+springMVC+mybatis
2.学习mybatis前准备web标准项目结构
model中的Ticket代码如下:
package com.day01.ssm.mybatisDemo.model; /**
* 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html
* 疑问咨询wx:851298348
*/
public class Ticket {
private Integer id;
private String startStation;
private String stopStation;
private String startTime;
private Integer ticketPrice; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getStartStation() {
return startStation;
} public void setStartStation(String startStation) {
this.startStation = startStation;
} public String getStopStation() {
return stopStation;
} public void setStopStation(String stopStation) {
this.stopStation = stopStation;
} public String getStartTime() {
return startTime;
} public void setStartTime(String startTime) {
this.startTime = startTime;
} public Integer getTicketPrice() {
return ticketPrice;
} public void setTicketPrice(Integer ticketPrice) {
this.ticketPrice = ticketPrice;
}
}
Ticket
dao层接口代码:
package com.day01.ssm.mybatisDemo.dao; import com.day01.ssm.mybatisDemo.model.Ticket; import java.util.List; /**
* 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html
* 疑问咨询wx:851298348
*/
public interface ITicketDao {
//增加
public void save(Ticket ticket);
//删除
public void deleteById(Integer id);
//修改
public void update(Ticket ticket);
//查找单个
public Ticket queryById(Integer id);
//查找所有
public List<Ticket> queryAll();
}
ITicketDao
dao实现代码结构
package com.day01.ssm.mybatisDemo.dao.impl; import com.day01.ssm.mybatisDemo.dao.ITicketDao;
import com.day01.ssm.mybatisDemo.model.Ticket; import java.util.List; /**
* 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html
* 疑问咨询wx:851298348
*/ /**
* 使用mybatis完成CRUD
*/
public class TicketDao implements ITicketDao {
@Override
public void save(Ticket ticket) {
//以前 加 链 预 执 释
//现在 mybatis } @Override
public void deleteById(Integer id) { } @Override
public void update(Ticket ticket) { } @Override
public Ticket queryById(Integer id) {
return null;
} @Override
public List<Ticket> queryAll() {
return null;
}
}
TicketDao
到此准备工作完成.
02.03.04.05.mybatis实现增删改查
项目结构图先看为快:
1.框架和最佳实践
框架(Framework):
什么是框架,框架从何而来,为什么使用框架?
框架:
1.是一系列jar包,其本质是对JDK功能的拓展.
2.框架是一组程序的集合,包含了一系列的最佳实践,作用是解决某一个领域的问题.
不同框架的目的就是解决不同领域的问题.
最佳实践(Best Practice):实际上是无数程序员经历过无数次尝试之后,总结出来的处理特定问题的特定方法.
如果把程序员的自由发挥看作是一条通往成功的途径,最佳实践就是其中的最短路径,能极大的解放生产力.
最佳实践三要素:可读性,可维护性,可拓展性.
消除重复
化繁为简
简单必须可读,简单必须可拓展
减少依赖,消除耦合
Web开发中的最佳实践:分层开发模式,即分工合作
JavaEE开发根据职责的纵向划分:表现层,业务层,持久层:
表现层(Predentation Layer):web/mvc:负责处理与界面交互的相关操作 (Struts2/Spring MVC)
业务层(Business Layer):service: 负责复杂的业务逻辑计算和判断 (Spring)
持久层(Persistent Layer):dao: 负责将业务逻辑数据进行持久化存储 (Hibernate/MyBatis)
2.ORM 与 MyBatis
对象关系映射(Object Relational Mapping,简称ORM/OR Mapping):
是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。
避免直接使用SQL语句对关系型数据库中的数据进行操作.
减少代码编写量,提高产品质量.
ORM 主要解决对象-关系的映射:
面向对象概念 面向关系概念
类 表
对象 表的行(记录)
属性 表的列(字段)
ORM的实现思想:
将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作。
因此ORM的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。
ORM 采用元数据来描述对象-关系映射细节:
元数据通常采用 XML 格式,并且存放在专门的对象-关系映射文件中。
目前流行的ORM框架:
1.JPA:本身是一种ORM规范,不是ORM框架.由各大ORM框架提供实现.
2.Hibernate:目前最流行的ORM框架.设计灵巧,性能优秀,文档丰富.
3.MyBatis:本是apache的一个开源项目iBatis,提供的持久层框架包括SQL Maps和DAO,允许开发人员直接编写SQL.
等
3.MyBatis历史
MyBatis前世今生:
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis ,2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。
iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO.
==================================================================================
MyBatis的优势:
MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。
MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。
MyBatis 使用简单的XML或注解用于配置和映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
4.MyBatis完成CRUD步骤
1.使用框架第一步:拷贝jar包.
a:MySQL驱动:mysql-connector-java-5.1.22-bin.jar
b:MyBatis的核心jar:mybatis-3.2.1.jar
c:MyBatis的依赖jar:MyBatis目录\lib中所有jar.
ps:commons-logging-1.1.1.jar其实可以不需要
2.MyBatis的主配置文件:
MyBatis-config.xml--->从PDF中去找.
3.映射文件(写sql语句的文件)
4.创建链接
备注:
操作步骤:
无论是用过的Hibernate,MyBatis通用的操作步骤:
1. 从配置文件(通常是XML配置文件中)得到 sqlsessionfactory(相当于DataSource)。
2. 由sqlSessionfactory 产生 sqlSession(相当于Connection)。
3. 在session 中完成对数据的增删改查和事务提交等。
4. 在用完之后关闭session 。
具体实现步骤:
1.jar包
2. 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>
<!-- 环境配置-->
<environments default="development">
<!--具体的数据库配置-->
<environment id="development">
<!-- 事务管理-->
<transactionManager type="JDBC"/>
<!--dataSource连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/station_data"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
</dataSource>
</environment>
</environments> <mappers>
<!--映射文件 关联sql 语句的文件-->
<mapper resource="mapper/ticketMapper.xml"/>
</mappers>
</configuration>
主配置文件模板来源于中文官方文档第5页.
3.映射文件(写sql语句的文件)
<?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">
<!--
namespace:该映射文件的名字,理论上可以任意取
-->
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="yy" parameterType="int" resultType="com.day01.ssm.mybatisDemo.model.Ticket">
SELECT id,start_station startStation,stop_station stopStation,start_time startTime,ticket_price ticketPrice FROM ticket WHERE id=#{id}
</select> <insert id="tt" parameterType="com.day01.ssm.mybatisDemo.model.Ticket" >
INSERT INTO ticket (start_station,stop_station) VALUES (#{startStation},#{stopStation})
</insert> <delete id="dd" parameterType="int">
DELETE FROM ticket WHERE id=#{id}
</delete> <update id="uu" parameterType="com.day01.ssm.mybatisDemo.model.Ticket">
UPDATE ticket SET start_station=#{startStation},stop_station=#{stopStation} WHERE id=#{id}
</update> <select id="ss" resultType="com.day01.ssm.mybatisDemo.model.Ticket">
SELECT id,start_station startStation,stop_station stopStation,start_time startTime,ticket_price ticketPrice FROM ticket </select>
</mapper>
该映射文件来源于中文官方文档第7页.
4.创建链接
CRUD具体实现代码:
package com.day01.ssm.mybatisDemo.dao.impl; import com.day01.ssm.mybatisDemo.dao.ITicketDao;
import com.day01.ssm.mybatisDemo.model.Ticket;
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 java.io.IOException;
import java.io.Reader;
import java.util.List; /**
* 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html
* 疑问咨询wx:851298348
*/ /**
* 使用mybatis完成CRUD
*/
public class TicketDao implements ITicketDao {
@Override
public void save(Ticket ticket) {
//以前 加 链 预 执 释
//现在 mybatis
try {
//指定mybatis主配置文件地址
String resource = "myBatis-config.xml";
//读取配置文件内容
Reader reader = Resources.getResourceAsReader(resource);
//从配置文件(通常是XML配置文件中)得到 sqlSessionfactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 由sqlSessionfactory 产生 sqlSession(相当于Connection)。
SqlSession sqlSession = sqlSessionFactory.openSession();
//开启事物
sqlSession.insert("org.mybatis.example.BlogMapper.tt",ticket);
//提交事物
sqlSession.commit();
sqlSession.close(); } catch (IOException e) {
e.printStackTrace();
} } @Override
public void deleteById(Integer id) {
//以前 加 链 预 执 释
//现在 mybatis
try {
//指定mybatis主配置文件地址
String resource = "myBatis-config.xml";
//读取配置文件内容
Reader reader = Resources.getResourceAsReader(resource);
//从配置文件(通常是XML配置文件中)得到 sqlSessionfactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 由sqlSessionfactory 产生 sqlSession(相当于Connection)。
SqlSession sqlSession = sqlSessionFactory.openSession();
//开启事物
sqlSession.delete("org.mybatis.example.BlogMapper.dd",id);
//提交事物
sqlSession.commit();
sqlSession.close(); } catch (IOException e) {
e.printStackTrace();
} } @Override
public void update(Ticket ticket) { //以前 加 链 预 执 释
//现在 mybatis
try {
//指定mybatis主配置文件地址
String resource = "myBatis-config.xml";
//读取配置文件内容
Reader reader = Resources.getResourceAsReader(resource);
//从配置文件(通常是XML配置文件中)得到 sqlSessionfactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 由sqlSessionfactory 产生 sqlSession(相当于Connection)。
SqlSession sqlSession = sqlSessionFactory.openSession(); sqlSession.update("org.mybatis.example.BlogMapper.uu",ticket);
//提交事物
sqlSession.commit();
sqlSession.close(); } catch (IOException e) {
e.printStackTrace();
}
} @Override
public Ticket queryById(Integer id) {
try {
//指定mybatis主配置文件地址
String resource = "myBatis-config.xml";
//读取配置文件内容
Reader reader = Resources.getResourceAsReader(resource);
//从配置文件(通常是XML配置文件中)得到 sqlSessionfactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 由sqlSessionfactory 产生 sqlSession(相当于Connection)。
SqlSession sqlSession = sqlSessionFactory.openSession();
//sqlSession 中完成对数据的增删改查和事务提交等
Ticket ticket= (Ticket)sqlSession.selectOne("org.mybatis.example.BlogMapper.yy", id);
sqlSession.close();
return ticket;
} catch (IOException e) {
e.printStackTrace();
}
return null;
} @Override
public List<Ticket> queryAll() { try {
//指定mybatis主配置文件地址
String resource = "myBatis-config.xml";
//读取配置文件内容
Reader reader = Resources.getResourceAsReader(resource);
//从配置文件(通常是XML配置文件中)得到 sqlSessionfactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 由sqlSessionfactory 产生 sqlSession(相当于Connection)。
SqlSession sqlSession = sqlSessionFactory.openSession();
//sqlSession 中完成对数据的增删改查和事务提交等
List<Ticket> list = sqlSession.selectList("org.mybatis.example.BlogMapper.ss");
sqlSession.close();
return list;
} catch (IOException e) {
e.printStackTrace();
}
return null; }
}
TicketDao
测试代码:
package com.day01.ssm.mybatisDemo.testDao; import com.day01.ssm.mybatisDemo.dao.impl.TicketDao;
import com.day01.ssm.mybatisDemo.model.Ticket;
import org.junit.Test; import java.util.List; /**
* 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html
* 疑问咨询wx:851298348
*/
public class TestTicketDao {
private TicketDao ticketDao=new TicketDao();
/**
*
*/
@Test
public void testQueryById(){
Ticket ticket = ticketDao.queryById(2);
System.out.println("ticket="+ticket);
} @Test
public void testSave(){
Ticket ticket = new Ticket();
ticket.setStartStation("上海");
ticket.setStopStation("北京");
ticketDao.save(ticket);
} /**
* 测试删除
*/
@Test
public void testDelete(){
ticketDao.deleteById(6); } /**
* 更新车票
*/
@Test
public void testUpdate(){
Ticket ticket = new Ticket();
ticket.setId(2);
ticket.setStartStation("北京-改");
ticket.setStopStation("成都"); ticketDao.update(ticket);
}
@Test
public void test(){
List<Ticket> tickets = ticketDao.queryAll();
System.out.println(" tickets= "+tickets); }
}
05_ssm基础(一)之mybatis简单使用的更多相关文章
- 05_ssm基础(二)之mybatis优化
06.mybatis优化之Mybatis工具类提取 优化原则(见官方文档): mybatis工具类存放位置: mybatis工具类代码: package com.day01.ssm.mybatisDe ...
- spring+springMVC+mybatis简单整合
spring+springMVC+mybatis简单整合, springMVC框架是spring的子项目,所以框架的整合方式为,spring+Mybatis或springMVC+mybatis. 三大 ...
- Java基础-SSM之mybatis快速入门篇
Java基础-SSM之mybatis快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实你可能会问什么是SSM,简单的说就是spring mvc + Spring + m ...
- 浅析MyBatis(二):手写一个自己的MyBatis简单框架
在上一篇文章中,我们由一个快速案例剖析了 MyBatis 的整体架构与整体运行流程,在本篇文章中笔者会根据 MyBatis 的运行流程手写一个自定义 MyBatis 简单框架,在实践中加深对 MyBa ...
- MyBatis简单的增删改查以及简单的分页查询实现
MyBatis简单的增删改查以及简单的分页查询实现 <? xml version="1.0" encoding="UTF-8"? > <!DO ...
- Java基础-SSM之mybatis的统计函数和分页查询
Java基础-SSM之mybatis的统计函数和分页查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Java基础-SSM之mybatis一对一关联
Java基础-SSM之mybatis一对一关联 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建husbands和wifes表并建 ...
- Java基础-SSM之mybatis多对多关联
Java基础-SSM之mybatis多对多关联 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建teas,stus,links表 u ...
- Java基础-SSM之mybatis一对多和多对一关系映射
Java基础-SSM之mybatis一对多和多对一关系映射 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建customers表: ...
随机推荐
- 压缩校验合并js之grunt搭建
1.在说grunt先认识几个grunt配置中的几个单词,concat(合并文件),uglify(压缩文件),jshint(检测代码规范),watch(实时监听修改的文件) 2.grunt是基于node ...
- 3. powerdesigner 生成mysql脚本,要求字段、表名有注释
1.字段注释设置 : 在 pdm 视图中,Database --> Edit Current DBMS. 找到 MySql5.0 --> Script --> Objects --& ...
- [记录] CSS 多行文本超出部分省略
如果实现单行文本的溢出显示省略号同学们应该都知道用text-overflow:ellipsis属性来,当然还需要加宽度width属来兼容部分浏览 <p style="width: 30 ...
- TypeError: 'range' object doesn't support item deletion
python 是个逐步迭代开发的过程,他不是向下兼容的,更不是向上兼容,版本不一致,好端端的程序就是不能运行了. 下面是在python 2中能运行,在Python 3中不能运行的代码.其实也很简单.但 ...
- 图像识别___YUV学习手记
视觉专家很早以前就知道,人眼对亮度分辨率的敏感度高于对色彩分辨率的敏感度. 这就是早期模拟和数字压缩形式的主要动因.视频信号会分解为亮度和色度,这两个是组成色彩的元素,这类似于图像可以分解为红.绿.蓝 ...
- delphi java 日期 转换 获取Unix时间戳
获取Unix时间戳 http://www.cnblogs.com/findumars/p/4716753.html 最简单准确一句话 Result:=IntToStr( DateTimeToUnix ...
- redis异常和注意点
目录: 1. 修改配置不起作用 2.Connection reset by peer: socket write error 3. redis-cli 查看中文乱码 1. 修改配置不起效果 我们修改了 ...
- jquery接触初级-----ajax 之:load()方法
jquery _ajax 请求主要有几种方式:load(),$.get(),$.post(),$.ajax(),$.getScript(),$.getJson() 1.load()方法 格式:load ...
- Python文件夹与文件的操作(转)
最近在写的程序频繁地与文件操作打交道,这块比较弱,还好在百度上找到一篇不错的文章,这是原文传送门,我对原文稍做了些改动. 有关文件夹与文件的查找,删除等功能 在 os 模块中实现.使用时需先导入这个模 ...
- maven ,添加加密算法,使用
1:消息摘要:(数字指纹):既对一个任意长度的一个数据块进行计算,产生一个唯一指纹.MD5/SHA1发送给其他人你的信息和摘要,其他人用相同的加密方法得到摘要,最后进行比较摘要是否相同. MD5(Me ...