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 作为一个轻量级的数 ...
随机推荐
- 3.26-3.31【cf补题+其他】
计蒜客)翻硬币 //暴力匹配 #include<cstdio> #include<cstring> #define CLR(a, b) memset((a), (b), s ...
- C#利用NPOI处理excel的类 NPOIHelper.cs
个人的NPOIHelp类,包括datatable导出到excel,dataset导出到excel,excel导入到datatable,excel导入到dataset, 更新excel中的数据,验证导入 ...
- 总结PHP删除字符串最后一个字符的三种方法
一.前言 从数据库中select()读取一对多的信息时,经常需要将取出的数组用某个特定的字符分割,然后拼接成字符串. 常见的语法格式: foreach ($arr as $key => $val ...
- 记录一下xcode9 添加文件夹的顺序
右击->Add Files to YourProject->弹出文件对话框,点击Options->选择:Copy Items if needed和Create Groups 要选择O ...
- MVC学习九:MVC 特性本质
一.特性的本质就是:对属性.方法.类加特性,本质就是new 一个特性类对象赋值给属性.方法.类. 可以通过反射的方式取得特性的值,代码如下: ①自定义特性 public class MyAttribu ...
- PAT——1017. A除以B
本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数.你需要输出商数Q和余数R,使得A = B * Q + R成立. 输入格式: 输入在1行中依次给出A和B,中间以1空格分隔. 输出格 ...
- 手机端app开发初识
1.所需软件说明 百度云下载链接: https://pan.baidu.com/s/1-TEQZP9QbJSlGSYedyAUFw密码: 2z8l 或者官方链接: Hbuilder:http://ww ...
- [Medium翻译]RESTful API权威设计指南-设计更好的API
本文为授权译文.希望查看原文的同学请戳链接:https://hackernoon.com/restful-api-design-step-by-step-guide-2f2c9f9fcdbf 对于我们 ...
- Zookeeper简介和安装(四)
一.简介: Zookeeper是一个分布式协调服务,提供的服务如下: 命名服务:类似于DNS,但仅对于节点 配置管理:服务配置信息的管理 集群管理:Dubbo使用Zookeeper实现服务治理 分布式 ...
- Oracle中case的第二种用法
procedure P_GetProVerSingInfo_2018(varFileID in varchar2, p_cr1 out refcontent, p_cr2 out refcontent ...