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 ...
随机推荐
- Nginx解析PHP的原理 | CGI、FastCGI及php-fpm的关系
Nginx解析PHP的原理,CGI/FastCGI以及PHP-Fpm的关系. 一.PHP+Nginx应运而生的场景.随着互联网的发展,用户对此接受面广,数据流的增大使得Web端的运行承载压力日益增大, ...
- jenkins集成sonar
用于我的sonar已经在一台机器上搭建好了,但是每次都要人工去执行sonar-run,很麻烦,所以就想着集成到jenkins上,在jenkins上点点按钮就可以看sonar结果,所以很抱歉,本博客不设 ...
- R语言的scale函数
1.数据的中心化 所谓数据的中心化是指数据集中的各项数据减去数据集的均值. 例如有数据集1, 2, 3, 6, 3,其均值为3 那么中心化之后的数据集为1-3,2-3,3-3,6-3,3-3,即:-2 ...
- vmware 12
下载地址 (linux:https://download3.vmware.com/software/wkst/file/VMware-Workstation-Full-12.1.1-3770994.x ...
- iOS 开发常用链接总结
知识归纳 1.招聘一个靠谱的程序员 面试题答案 https://github.com/ChenYilong/iOSInterviewQuestions 2.中文 iOS/Mac 开发博客列表 http ...
- robot framework自定义python库
自定义python库的好处: robot framework填表式,将python的灵活性弄没了,但是不要担心,RF早就想到了解决办法,就是扩充自己的库. 1.在python应用程序包目录下创建一个新 ...
- mybatis之注解式开发之关联查询
package com.bjsxt.mapper; import org.apache.ibatis.annotations.Select; import com.bjsxt.pojo.Clazz; ...
- SpringMVC.入门篇.一.HelloWorld
SpringMVC.入门篇<一>HelloWorld 项目包结构如下: HelloController.java 代码 package com.charles.controller; im ...
- C#中生成的随机数为什么不随机?
from:https://www.xcode.me/more/net-csharp-generate-random 随机数生成方法可以说是任何编程语言必备的功能,它的重要性不言而言,在C#中我们通常使 ...
- Unity shader学习之逐像素漫反射光照模型
shader如下: Shader "Custom/Diffuse Fragment-Level" { Properties { _Diffuse (,,,) } SubShader ...