mybatis使用-helloword(一)
前言
首先感谢https://my.oschina.net/zudajun/blog/665956(jd上也出书了貌似) 这位作者。让自己能系统的看完和理解第一个框架的源码(其实我反复看了4遍以上,一遍实际操作 一边打断点一边看)。我现在发现学习一个框架首先会简单的应用,然后才是阅读源码进阶,不然直接抱着源码肯,会很晕。所以首先记录mybatis的各种用法开始。
写博客的主要原因是方便后面自己快速查阅。
使用SqlSession完成CRUD
1.引入mybatis相关依赖
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
<!-- 数据源 c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5-pre8</version>
</dependency>
</dependencies>
2.创建测试相关的表
CREATE TABLE classes
(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '班级id',
`name` VARCHAR(50) NOT NULL COMMENT '班级名称'
)
3.创建对应的实体类
public class Classes implements Serializable{
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
4.创建mybatis配置文件
mybatis.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" />
<!--UNPOOLED 非连接池 POOLED mybatis提供的POOLED连接池 JNDI mybtais提供的JNDIfacotory获取数据源
根据配置找到对应的工厂 创建对应的数据源 可以直接配置工厂 需要实现UnpooledDataSourceFactory
-->
<dataSource type="com.liqiang.core.C3P0DataSourceFactory">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/DTest?characterEncoding=UTF-8" />
<property name="user" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- mapping 支持是三种方式 类全明称 包扫描 mapperXml路径 -->
<mappers>
<mapper resource="ClassesMapper.xml"></mapper>
<!-- <mapper class=""></mapper>
<package name="com.liqiang.mapper"/>-->
</mappers> </configuration>
上面dataSource Type 因为mybatis不支持c3p0所以通过他提供的结构自定义连接池创建工厂
public class C3P0DataSourceFactory extends UnpooledDataSourceFactory {
public C3P0DataSourceFactory () {
this . dataSource = new ComboPooledDataSource () ;
}
}
UnpooledDataSourceFactory 继承这个 然后构造函数 初始化 初始化c3p0的数据源对象
5.定义一个在resources下增加 ClassesMapper.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="classes">
<select id="selectAll" resultType="com.liqiang.entity.Classes">
select * from classes
</select>
<insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="com.liqiang.entity.Classes">
insert INTO classes(name) VALUES (#{name});
</insert>
<update id="update" parameterType="com.liqiang.entity.Classes">
UPDATE classes set name=#{name} where id=#{id};
</update>
<delete id="delete" parameterType="int">
delete from classes where id=#{id};
</delete>
</mapper>
parameterType为传入参数类型
useGeneratedKeys 为是否使用JDB3KeyGenerated(可以理解成自增情况下插入会回填id) keyProperty为回填自增id的属性名字
6.测试
public static void main(String[] args) throws FileNotFoundException {
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder
.build(ClassLoader.getSystemResourceAsStream("mybatis.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession();
//新增
Classes classes=new Classes();
classes.setName("一年级");
sqlSession.insert("classes.insert",classes);
sqlSession.commit();
//查询
List<Classes> list=sqlSession.selectList("classes.selectAll");
list.forEach(c->{
System.out.println(c.getName());
});
//修改
classes.setName("二年级");
sqlSession.update("classes.update",classes);
sqlSession.commit();
list=sqlSession.selectList("classes.selectAll");
list.forEach(c->{
System.out.println(c.getName());
});
//删除
sqlSession.delete("classes.delete",list.get(0).getId());
sqlSession.commit();
暂时理解:
1.解析mybatis.xml 扫描mappers下面 把对应的标签通过 namespace+id当key把各个map形式存储起来
2.通过sqlSession的CRUD方法 传入key 执行对应的sql
使用代理完成CRUD
1.创建一个mapper包,并将ClassesMapper.xml移动到里面,并创建一个mapper接口,方法名字和返回类型 参数类型要对应ClassesMapper.xml
public interface ClassesMapper {
public List<Classes> select();
public void update(Classes classes);
public void insert(Classes classes);
public void delete(int id);
}
2.将ClassesMapper.xml的namespace改成对应Mapper接口的全名称(必须)
<mapper namespace="com.liqiang.mapper.ClassesMapper">
...
</mapper>
3.修改mybatis下的xml扫描 变为包扫描
<mappers>
<package name="com.liqiang.mapper"/>
</mappers>
理解:
1.mybatis会扫描这个包下面所有类型为interface的class
2.然后遍历这些class通过classname+.xml 找到对应的mapper.xml(这就是为什么这种方式mapper接口和mapper.xml名字要一致的原因)
4.测试
public static void main(String[] args) throws FileNotFoundException {
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder
.build(ClassLoader.getSystemResourceAsStream("mybatis.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession();
ClassesMapper classesMapper=sqlSession.getMapper(ClassesMapper.class);
//新增
Classes classes=new Classes();
classes.setName("一年级");
classesMapper.insert(classes);
sqlSession.commit();
//查询
List<Classes> list=sqlSession.selectList("classes.selectAll");
list.forEach(c->{
System.out.println(c.getName());
});
//修改
classes.setName("二年级");
classesMapper.update(classes);
sqlSession.commit();
list=classesMapper.select();
list.forEach(c->{
System.out.println(c.getName());
});
//删除
classesMapper.delete(list.get(0).getId());
sqlSession.commit();
}
理解:
1.sqlSession.getMapper会获得对应接口的代理类,调用对应的方法 底层会获得代理类实现接口的全名称packagename+接口名字+当前方法名字做key找到对应的mapper标签(这就是基于代理namespace一定要跟对应mapper的全名称一致的原因)
mybatis使用-helloword(一)的更多相关文章
- Mybatis 入门 -- 最简单的引入和使用
参考:http://www.mybatis.org/mybatis-3/zh/getting-started.html 从今天开始学习官方文档. 1.项目搭建 项目结构: 首先,搭建一个maven项目 ...
- eclipse 使用maven 创建springmvc + mybatis
接着eclipse 使用maven 创建纯spring mvc项目 毕竟项目都要访问数据库的, 所以加上mybatis的支持也就是网上大多时候说的 SSM框架的搭建(Spring + Spring M ...
- springboot + mybatis 前后端分离项目的搭建 适合在学习中的大学生
人生如戏,戏子多半掉泪! 我是一名大四学生,刚进入一家软件件公司实习,虽说在大学中做过好多个实训项目,都是自己完成,没有组员的配合.但是在这一个月的实习中,我从以前别人教走到了现在的自学,成长很多. ...
- eclipse+tomcat+maven+springmvc+mybatis+mysql集成WebService插件(Axis2+CXF)
$1 环境介绍 $1.1 Eclipse Java EE IDE for Web Developers:Neon.2 Release (4.6.2) $1.2 Maven:3.3.9 $1.3 Spr ...
- SpringBoot+MyBatis+Mysql 详细示例
SpringBoot与MyBatis整合,底层数据库为mysql的使用示例 项目下载链接:https://github.com/DFX339/bootdemo.git 新建maven项目,web ...
- MyBatis环境配置及入门
Mybatis 开发环境搭建,选择: MyEclipse8.5 版本,mysql 5.5, jdk 1.8, mybatis3.2.3.jar 包.这些软件工具均可以到各自的官方网站上下载. 整个过程 ...
- 基于Maven的Spring + Spring MVC + Mybatis的环境搭建
基于Maven的Spring + Spring MVC + Mybatis的环境搭建项目开发,先将环境先搭建起来.上次做了一个Spring + Spring MVC + Mybatis + Log4J ...
- Mybatis资料
1. 入门案例 https://www.cnblogs.com/xdp-gacl/p/4261895.html 2. 详细笔记 以及配套视频教程: 笔记:https://blog.csdn.net/S ...
- Hibernate基础-HelloWord
1. ORM :ORM (Object /Relation Mapping ): 对象/关系映射(理解) 1) ORM 主要解决对象 -关系的映射 2) .ORM的思想:将关系数据 ...
随机推荐
- 二分查找(c & c++)
typedef int ElemType; C版本号 [递归版本号] int binSearch2(ElemType List[] ,int x,int head,int tail){ //递归版本号 ...
- UI设计--->全心全意为人民服务的宗旨---->注重客户体验--->软件持久的生命力
UI即User Interface(用户界面)的简称. UI设计是指对软件的人机交互.操作逻辑.界面美观的总体设计. 好的UI设计不仅是让软件变得有个性有品味,还要让软件的操作变得舒适简单.自由.充分 ...
- Navicat Lite 提示Connection to mysql server on 10065
Navicat Lite 提示Connection to mysql server on 10065 验证过主要是防火墙问题 [root@014136251035 zhop]# vi /etc/sys ...
- 如何使用git 生成patch 和打入patch 标签: gitpatch【转】
本文转载自:http://blog.csdn.net/liuhaomatou/article/details/54410361 平时我们在使用git 管理项目的时候,会遇到这样一种情况,那就是客户使用 ...
- MySQL:常见错误01
ylbtech-MySQL:常见错误01 1.返回顶部 1. [SQL]select * from product_product_tag aLEFT JOIN system_tag b on b.i ...
- PCB 无需解压,直接读取Genesis TGZ指定文件 实现方法
通过无需解压读取ZIP压缩包的方法,寻思者如何可以不解压直接读Genesis TGZ文件内容, 通过查找资料,原来可以通过:SharpCompress.dll工具实现此需求,此工具如此NB 一.Sha ...
- MYSQL 数据库命令行终端操作笔记
1.数据库登录: 1.登录本地的MYSQL数据库:mysql -u root -p 2.连接远程主机上的MYSQL数据库:mysql -h 192.168.191.2 -u root -p 123 ...
- MyEclipse配置https
1.参照CAS配置(1)SSL证书配置文章配置证书. 2.打开myeclipse的Workspace下的.metadata/.me_tcat7/conf/server.xml 打开文件,添加如下代码 ...
- [原创]Linux(CentOS)下安装nodejs+express
网上找了很多步骤,各种问题,自己总结下吧 1.下载 wget --no-check-certificate https://nodejs.org/dist/v6.10.1/node-v6.10.1-l ...
- [2月1号] 努比亚全机型ROM贴 最全最新NubiaUI5.0 ROOT 极速体验
前言 感谢在开发过程中mandfx和dgtl198312予以的帮助!本帖将整理所有Nubia手机的最新刷机包,还有少数机型未制作刷机包,需要的机油可以联系我制作recovery以及刷机包加群23722 ...