MyBatis框架入门之(二)
在本篇文章中,没有对细节进行处理的很好,有很多晓得细节的遗漏,本文只是一个简单的快速的入门
MyBatis的快速入门
1.导入MyBatis框架jar包
2.配置文件
3.SqlSessionFactoryBuilder,传入字节输入流,构建工厂
4.SqlSessionFactory,创建SqlSession
5.SqlSession执行selectList方法查询数据
Test类:
@Test
public void myBatis_QuickStart() throws IOException {
InputStream inputStream =
Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new
SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory =
sqlSessionFactoryBuilder.build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> list = sqlSession.selectList("test.queryList");
if(list!=null && list.size()>0){
for(User user : list){
System.out.println(user);
}
}
}
sqlMapperConfig.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 type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"
/>
<property name="url"
value="jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml" />
</mappers>
</configuration>
UserMapper.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="test">
<select id="queryList" resultType="com.itheima.pojo.User">
select * from user
</select>
</mapper>
MyBatis的CRUD

这是目录结构
sqlMapperConfig.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 name="com.qingmu.domain"></package>
</typeAliases>
<!--配置数据源环境信息-->
<environments default="development">
<!--开发环境数据源配置-->
<environment id="development">
<!--
事务管理器
type="JDBC" 当前MyBatis事务管理,使用的是JDBC的事务
Connection接口方法 commit rollback
type="MANAGERED" 不管理事务,交给其他框架管理
-->
<transactionManager type="JDBC"/>
<!--
数据源
type="POOLED" 使用数据库连接池
type="UNPOOLED" 不使用连接池
-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
<environment id="test">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments> <mappers>
<mapper resource="UserMapper.xml"></mapper>
</mappers>
</configuration>
domain包中的User类
package com.qingmu.domain; /**
* @Auther:qingmu
* @Description:脚踏实地,只为出人头地
* @Date:Created in 21:07 2019/3/30
*/
public class User {
private Integer id;
private String username;
private String sex;
private String birthday;
private String address; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public String getDate() {
return birthday;
} public void setDate(String birthday) {
this.birthday = birthday;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} @Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", sex='" + sex + '\'' +
", date='" + birthday + '\'' +
", address='" + address + '\'' +
'}';
}
}
Usermapper
package com.qingmu.Mapper; import com.qingmu.domain.User; import java.util.List; /**
* @Auther:qingmu
* @Description:脚踏实地,只为出人头地
* @Date:Created in 21:15 2019/3/30
*/
public interface UserMapper { /**
* 根据id删除一条数据
*/ void deleteUser(Integer id); /**
* 插入一条数据
*/
void insertUser(User user); /**
* 通过id查询用户
* @param id
* @return
*/
User queryUserById(Integer id); /**
* 根据用户名模糊查询
*/
List<User> queryUserByLike();
}
UserMapper.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="test">
<select id="queryUserById" resultType="com.qingmu.domain.User" parameterType="Integer">
select * from user where id = #{id}
</select> <select id="queryUserByLike" resultType="com.qingmu.domain.User" parameterType="String">
select * from user where username like #{username}
</select> <!--
< selectKey>< /selectKey> 再执行一次SQL语句'
- 属性order:在insert之前或者之后执行
- keyProperty:查询的结果放在哪里显示
- resultType:查询结果的数据类型 注意:
主键自增:
1.selectKey会将得到的主键放入model的主键属性中
2.在使用主键自增的时候,不能对主键进行主动赋值,才能获取到这个主键.
3.使用user.getid()才能获取到这个返回来的那个值
主键非自增:
<insert id="insert" parameterType="com.soft.mybatis.model.Customer">
跟自增主键方式相比,这里的不同之处只有两点
1 insert语句需要写id字段了,并且 values里面也不能省略
2 selectKey 的order属性需要写成BEFORE 因为这样才能将生成的uuid主键放入到model中,
这样后面的insert的values里面的id才不会获取为空
跟自增主键相比就这点区别,当然了这里的获取主键id的方式为 select uuid()
当然也可以另写别生成函数。
<selectKey keyProperty="id" order="BEFORE" resultType="String">
select uuid()
</selectKey>
insert into t_customer (id,c_name,c_sex,c_ceroNo,c_ceroType,c_age)
values (#{id},#{name},#{sex},#{ceroNo},#{ceroType},#{age})
</insert> -->
<insert id="insertUser" parameterType="com.qingmu.domain.User"> <selectKey order="AFTER" resultType="int" keyProperty="id">
<!-- insert语句之后执行,查询结果集直接封装pojo对象-->
SELECT LAST_INSERT_ID()
</selectKey>
insert into user values (#{id},#{username},#{sex},#{birthday},#{address})
</insert> <!--根据id删除一条数据-->
<delete id="deleteUser" parameterType="Integer" >
DELETE from user where id=#{id}
</delete> </mapper>
测试类:
package com.qingmu; import com.qingmu.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test; import java.io.InputStream;
import java.util.List; /**
* @Auther:qingmu
* @Description:脚踏实地,只为出人头地
* @Date:Created in 21:19 2019/3/30
*/
public class SqlMapperTest { private SqlSessionFactory sqlSessionFactory = null; @Before
public void before() {
// 获取到工厂建造者对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 通过本类加载器获取到一个流对象,这个流对象用来读取SqlMapperConfig.xml文件
InputStream inputStream = SqlMapperTest.class.getClassLoader().getResourceAsStream("sqlMapperConfig.xml");
// 创建工厂对象
sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
} /**
* 根据id删除一条数据
*/
@Test
public void deleteUser(){
SqlSession sqlSession = sqlSessionFactory.openSession();
int delete = sqlSession.delete("test.deleteUser", 8);
sqlSession.commit();
System.out.println(delete);
} /**
* 插入一条数据
*/
@Test
public void insertTest() {
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
// 使用selectKey获取自增的主键,不能对主键进行设置
// user.setId(8);
user.setSex("男");
user.setAddress("南京");
user.setUsername("赵云"); int insert = sqlSession.insert("test.insertUser", user);
// 不提交不能进入数据库
sqlSession.commit();
sqlSession.close();
// 将获取到的主键进行输出
System.out.println(user.getId());
System.out.println(insert);
} /**
* 查询一条数据 selectOne
*/
@Test
public void test() {
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = (User) sqlSession.selectOne("test.queryUserById", 2);
System.out.println(user);
} /**
* 模糊查询 selectList
*/
@Test
public void listTest() {
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> user = sqlSession.selectList("test.queryUserByLike", "%王%");
if (user != null && user.size() > 0) {
for (User o : user) {
System.out.println(o);
}
}
} }
本文中使用的数据库的结构为

在本文中,有使用selectKey标签,在新增一条数据以后,可以再将这条数据中的id取出来,以方便逻辑使用.
这个标签使用的时候,会将id封装在domian实体类中,然后使用getId(),将id获取出来.
MyBatis框架入门之(二)的更多相关文章
- (转)MyBatis框架的学习(二)——MyBatis架构与入门
http://blog.csdn.net/yerenyuan_pku/article/details/71699515 MyBatis框架的架构 MyBatis框架的架构如下图: 下面作简要概述: S ...
- 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(2 配置spring-dao和测试)
用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 搭建目录环境和依赖) 四:在\resources\spring 下面 ...
- 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 构建目录环境和依赖)
引言:在用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建一 的基础上 继续进行项目搭建 该部分的主要目的是测通MyBatis 及Spring-dao ...
- MyBatis基础入门《二十》动态SQL(foreach)
MyBatis基础入门<二十>动态SQL(foreach) 1. 迭代一个集合,通常用于in条件 2. 属性 > item > index > collection : ...
- MyBatis基础入门《二》Select查询
MyBatis基础入门<二>Select查询 使用MySQL数据库,创建表: SET NAMES utf8mb4; ; -- ---------------------------- -- ...
- 一看就懂的Mybatis框架入门笔记
本篇为初学Mybatis框架时的入门笔记,整理发出 Spring集成Mybatis https://www.cnblogs.com/yueshutong/p/9381590.html SpringBo ...
- Mybatis框架入门
Mybaits框架 一.什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了googl ...
- mybatis框架入门程序:演示通过mybatis实现数据库的查询操作
我们现在工程基于的数据库见“https://www.cnblogs.com/wyhluckdog/p/10147754.html”这篇博文. 1.mybatis下载 mybatis的代码由githua ...
- Java Mybatis 框架入门教程
一.Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去 设置参数和获取检索结果.MyBati ...
随机推荐
- 查看npm仓库版本号
http://repo.inspur.com:8081/artifactory/webapp/#/artifacts/browse/simple/General/thirdparty iop 找到现在 ...
- JQuery 获取页面某一元素在屏幕上的位置
获取页面某一元素的绝对X,Y坐标 var X = $('#ElementID').offset().top;//元素在当前视窗距离顶部的位置 var Y = $('#ElementID').offse ...
- JS基础篇-- body.scrollTop与documentElement.scrollTop
获取当前页面滚动条纵坐标的位置:document.body.scrollTop与document.documentElement.scrollTop 获取当前页面滚动条横坐标的位置:document. ...
- iOS UI基础-13.0 数据存储
应用沙盒 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 应用沙盒的文件系统目录,如下图所示(假设应用的名称叫Lay ...
- 34.js----JS 开发者必须知道的十个 ES6 新特性
JS 开发者必须知道的十个 ES6 新特性 这是为忙碌的开发者准备的ES6中最棒的十个特性(无特定顺序): 默认参数 模版表达式 多行字符串 拆包表达式 改进的对象表达式 箭头函数 =&> ...
- sqli-labs(十三)(hpp)
第二十九关 这关说的是有waf,其实只是模拟waf的场景,就是说waf处理的变量和后台程序接受的变量不一致. 考验的参数污染,具体可以参考其他文章关于HPP的解释. 先看源码吧: 输入?id=1&am ...
- maven下载和安装
注意:安装Maven3之前需要安装jdk1.7以上版本,下面介绍的是最新版Maven官网下载并安装, 每个人使用的编辑器不同,在这里我就不介绍了,可以去网上查对应编辑器Maven配置方法. 第一步,官 ...
- C++中位运算
简介 1 位逻辑运算符: & (位 “与”) and ----------------- 2个都为1 才是1-----------0^0 = 0 , 0^1 = 0, 1^0 = 0 ...
- 2.sklearn库中的标准数据集与基本功能
sklearn库中的标准数据集与基本功能 下面我们详细介绍几个有代表性的数据集: 当然同学们也可以用sklearn机器学习函数来挖掘这些数据,看看可不可以捕捉到一些有趣的想象或者是发现: 波士顿房价数 ...
- Necklace of Beads (polya定理的引用)
Beads of red, blue or green colors are connected together into a circular necklace of n beads ( n &l ...