Mybatis之XML、注解
前言
上篇简单介绍了Mybatis的简单实用,本篇先对上次实验环境的一些内容进行优化,然后验证Mybatis的XML配置以及注解方式。
实验环境优化
数据库配置
在mybatis的配置文件中,引入数据库配置文件db.properties,然后修改配置文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
name=root
password=admin
mybatis配置文件 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>
<!-- 数据库配置文件 -->
<properties resource="db.properties"/>
<!--
development : 开发模式
work : 工作模式
-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${name}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/lion/mapper/UserMapper.xml" />
</mappers>
</configuration>
实体类定义别名
没有为实体定义别名时,在sql映射xml中应用实体时,比如parameterType resultType 中就需要配置实体的全路径名(全限定名)。
当为实体定义了别名后,映射文件中可以直接配置实体的别名即可。因此为实体类定义别名,可以简化Sql映射xml文件中对实体的引用配置。
mybatis配置文件中<typeAlises>定义实体别名有两种方式:
- typeAlias 单个为每个实体定义别名 当实体类比较多是 配置增多 不方便
- package 指定实体的包 会自动为改包下的所有实体自动设定各自的类名为别名
优化后的Mybatis配置文件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>
<!-- 数据库配置文件 -->
<properties resource="db.properties"/> <!-- 配置实体的别名 -->
<typeAliases>
<!-- 此种方式是分别为每一个实体设置别名 mapper xml 中resultType即为alias的值-->
<!-- <typeAlias type="com.lion.pojo.User" alias="_User"/> -->
<!-- package 设置别名的方式会自动为该包下的所有JavaBean设置别名为其类名称 -->
<package name="com.lion.pojo"/>
</typeAliases>
<!--
development : 开发模式
work : 工作模式
-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${name}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/lion/mapper/UserMapper.xml" />
</mappers>
</configuration>
Mybatis实现方式
分别使用XML和注解的方式实现对User的CURD。
XML方式
sql中参数定义为 #{} 在Mybatis配置文件中已经配置对实体类的自动设置别名,因此此处可以直接使用实体类的别名进行引用。
<?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="com.lion.mapper.UserMapper">
<select id="selectUser" parameterType="int" resultType="User">
select * from users where id = #{id}
</select> <delete id="deleteUser" parameterType="int">
delete from users where id = #{id}
</delete> <update id="updateUser" parameterType="User">
update users set name = #{name},age = #{age} where id = #{id}
</update> <insert id="addUser" parameterType="User">
insert into users(name,age) values(#{name},#{age})
</insert> <select id="selectAll" resultType="User" >
select * from users
</select>
</mapper>
package com.lion.test; import java.io.IOException;
import java.util.List; import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test; import com.lion.pojo.User;
import com.lion.util.MybatisUtils; public class TestUserCURDByXML { @Test
public void testAdd() {
try {
SqlSessionFactory factory = MybatisUtils.getFactory();
SqlSession session = factory.openSession(); String statement = "com.lion.mapper.UserMapper.addUser";
// id mysql设置的自增长 此处设为 -1
User user = new User(-1, "Spring", 25);
session.insert(statement, user); // 不提交的话 数据无法提交到数据库
session.commit();
session.close();
} catch (IOException e) {
e.printStackTrace();
}
} @Test
public void testDelete() {
try {
SqlSessionFactory factory = MybatisUtils.getFactory();
// 自动提交事务
SqlSession session = factory.openSession(true); String statement = "com.lion.mapper.UserMapper.deleteUser";
session.delete(statement, 4); session.close();
} catch (IOException e) {
e.printStackTrace();
}
} @Test
public void testUpdate() {
try {
SqlSessionFactory factory = MybatisUtils.getFactory();
// 自动提交事务
SqlSession session = factory.openSession(true); String statement = "com.lion.mapper.UserMapper.updateUser";
User user = new User(1, "mali", 18);
session.update(statement, user); session.close();
} catch (IOException e) {
e.printStackTrace();
}
} @Test
public void testSelect() {
try {
SqlSessionFactory factory = MybatisUtils.getFactory();
// 自动提交事务
SqlSession session = factory.openSession(true); String statement = "com.lion.mapper.UserMapper.selectAll";
List<User> users = session.selectList(statement);
for (User user : users) {
System.out.println(user);
} session.close();
} catch (IOException e) {
e.printStackTrace();
}
} }
注解方式
package com.lion.testAnnotation; import java.util.List; import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update; import com.lion.pojo.User; public interface UserMapper {
@Insert("insert into users(name,age) values(#{name},#{age})")
int insertUser(User user); @Delete("delete from users where id = #{id}")
int deleteUser(int id); @Update("update users set name = #{name},age = #{age} where id = #{id}")
int updateUser(User user); @Select("select * from users where id = #{id}")
User selectUser(int id); @Select("select * from users")
List<User> selectAll();
}
Mybatis配置文件中注册映射接口 class
<mappers>
<mapper resource="com/lion/mapper/UserMapper.xml" />
<mapper class="com.lion.testAnnotation.UserMapper"/>
</mappers>
针对同一实体的映射文件不能放到同一个包中。
package com.lion.testAnnotation; import java.io.IOException;
import java.util.List; import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Before;
import org.junit.Test; import com.lion.pojo.User;
import com.lion.util.MybatisUtils; public class TestUserCURDByAnnotaion2 { private SqlSessionFactory factory; @Before
public void loadFactory() {
try {
factory = MybatisUtils.getFactory();
} catch (IOException e) {
e.printStackTrace();
}
} @Test
public void testAdd() {
SqlSession session = factory.openSession(true);
// 映射器
UserMapper mapper = session.getMapper(UserMapper.class); int i = mapper.insertUser(new User(-1, "xiazis", 24)); System.out.println(i); session.close(); } @Test
public void testDelete() {
SqlSession session = factory.openSession(true);
// 映射器
UserMapper mapper = session.getMapper(UserMapper.class); int i = mapper.deleteUser(1); System.out.println(i); session.close(); } @Test
public void testUpdate() {
SqlSession session = factory.openSession(true);
// 映射器
UserMapper mapper = session.getMapper(UserMapper.class); int i = mapper.updateUser(new User()); System.out.println(i); session.close(); } @Test
public void testSelect() {
SqlSession session = factory.openSession(true);
// 映射器
UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.selectUser(2); System.out.println(user); session.close(); } @Test
public void testSelectAll() {
SqlSession session = factory.openSession(true);
// 映射器
UserMapper mapper = session.getMapper(UserMapper.class); List<User> users = mapper.selectAll(); for (User user : users) {
System.out.println(user);
} session.close(); } }
Mybatis之XML、注解的更多相关文章
- Mybatis基于XML配置SQL映射器(二)
Mybatis之XML注解 之前已经讲到通过 mybatis-generator 生成mapper映射接口和相关的映射配置文件: 下面我们将详细的讲解具体内容 首先我们新建映射接口文档 sysUse ...
- mybatis 同时使用 XML 和注解
引言 学过 MyBatis 框架的童靴都知道, MyBatis 支持 XML 和注解两种方式配置,如下: 使用 XML 方式配置 只写明 XML 的 resource 路径(或者URL路径) < ...
- mybatis 与 xml
mybatis的两大重要组件:配置和映射文件,都是可以通过xml配置的(新版本新增了注解的方式配置Mapper),下面来解析下mybatis是怎么做的 其中,关于配置文件解析的主要是在这个类XMLCo ...
- springboot使用之二:整合mybatis(xml方式)并添加PageHelper插件
整合mybatis实在前面项目的基础上进行的,前面项目具体整合请参照springboot使用之一. 一.整合mybatis 整合mybatis的时候可以从mybatis官网下载mybatis官网整合的 ...
- Java DB 访问之 mybatis mapper xml 配置方式
1 项目说明 项目采用 maven 组织 ,jdbc 唯一的依赖就是 mysql-connector-java pom 依赖如下: mysql 数据连接 : mysql-connector-java ...
- SpringBoot整合Mybatis【非注解版】
接上文:SpringBoot整合Mybatis[注解版] 一.项目创建 新建一个工程 选择Spring Initializr,配置JDK版本 输入项目名 选择构建web项目所需的state ...
- SpringBoot整合Mybatis之xml
SpringBoot整合Mybatis mybatis ORM框架.几个重要的概念: Mapper配置 : 可以使用基于XML的Mapper配置文件来实现,也可以使用基于Java注解的Mybatis注 ...
- Spring boot Mybatis 整合(注解版)
之前写过一篇关于springboot 与 mybatis整合的博文,使用了一段时间spring-data-jpa,发现那种方式真的是太爽了,mybatis的xml的映射配置总觉得有点麻烦.接口定义和映 ...
- 关于Mybatis的@Param注解 及 mybatis Mapper中各种传递参数的方法
原文:https://blog.csdn.net/mrqiang9001/article/details/79520436 关于Mybatis的@Param注解 Mybatis 作为一个轻量级的数 ...
随机推荐
- 天地图,js 4.0 api,简单调用,高手请绕行
本文介绍使用天地图 js4.0 api,实现地图显示后台gps分布情况: 主要借用H5 GPS获取,利用天地图的背景展示: 效果图如下: 第一步,通过采集网页,手机gps数据,录入后台数据库:界面如下 ...
- JSTL1.2学习总结
1.0 JSTL的下载 JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的.JSTL只 ...
- $Self~Problem~C~:~Samsara$
题目背景: 在这个\(Canman\)界的人都知道,世界上最伟大的修道者 -- \(Felling\),曾经结束了\(Canman\)的无垠盏之灾,守护了\(Canman\)的和平.在无垠盏之灾的最后 ...
- c++中如 <类名 类名::对象> 是什么意思
CComplex CComplex::add(CComplex &x) (这一句 不懂为何 类名 类名::对象) { CComplex y(real+x.real,image+x.image) ...
- 安装sqlserver2016出现的错误
今天安装sharepoint 2016,projectserver 2016,在安装sqlserver2016的时候突然报错了,提示需要安装oracle java se, Rule “Oracle J ...
- Flex入坑指南
弹性布局flex是一个几年前的CSS属性了,说它解放了一部分生产力不为过.至少解放了不少CSS布局相关的面试题 :) 之前网上流行的各种XX布局,什么postion: absolute+margin, ...
- 修改本机默认的jdk版本
因为开发需要使用多个jdk,在修改jdk版本时遇到了一些问题 在系统变量的%JAVA_HOME%中修改了jdk的路径,但是重启后java -version版本并没有改变. 在网上找到一篇文章,修改了注 ...
- 将jquery.qqFace.js表情转换成微信的字符码
jquery.qqFace.js使用方法 引用 <script src="~/Content/qqFace/js/jquery.qqFace.js?v=3"></ ...
- 纯 js 实现跨域接口调用 jsonp
开发「bufpay.com 个人即时到账收款平台」的时候,支付页面需要 poll轮询 查询订单状态. bufpay 支付接口如下: 接口地址:https://bufpay.com/api/pay/ai ...
- 用http.get()简单实现网络验证防止客户不给尾款_电脑计算机编程入门教程自学
首发于:用http.get()简单实现网络验证防止客户不给尾款_电脑计算机编程入门教程自学 http://jianma123.com/viewthread.aardio?threadid=428 给软 ...