前言

  上篇简单介绍了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、注解的更多相关文章

  1. Mybatis基于XML配置SQL映射器(二)

    Mybatis之XML注解 之前已经讲到通过 mybatis-generator 生成mapper映射接口和相关的映射配置文件: 下面我们将详细的讲解具体内容 首先我们新建映射接口文档  sysUse ...

  2. mybatis 同时使用 XML 和注解

    引言 学过 MyBatis 框架的童靴都知道, MyBatis 支持 XML 和注解两种方式配置,如下: 使用 XML 方式配置 只写明 XML 的 resource 路径(或者URL路径) < ...

  3. mybatis 与 xml

    mybatis的两大重要组件:配置和映射文件,都是可以通过xml配置的(新版本新增了注解的方式配置Mapper),下面来解析下mybatis是怎么做的 其中,关于配置文件解析的主要是在这个类XMLCo ...

  4. springboot使用之二:整合mybatis(xml方式)并添加PageHelper插件

    整合mybatis实在前面项目的基础上进行的,前面项目具体整合请参照springboot使用之一. 一.整合mybatis 整合mybatis的时候可以从mybatis官网下载mybatis官网整合的 ...

  5. Java DB 访问之 mybatis mapper xml 配置方式

    1 项目说明 项目采用 maven 组织 ,jdbc 唯一的依赖就是 mysql-connector-java pom 依赖如下: mysql 数据连接 : mysql-connector-java ...

  6. SpringBoot整合Mybatis【非注解版】

    接上文:SpringBoot整合Mybatis[注解版] 一.项目创建 新建一个工程 ​ 选择Spring Initializr,配置JDK版本 ​ 输入项目名 ​ 选择构建web项目所需的state ...

  7. SpringBoot整合Mybatis之xml

    SpringBoot整合Mybatis mybatis ORM框架.几个重要的概念: Mapper配置 : 可以使用基于XML的Mapper配置文件来实现,也可以使用基于Java注解的Mybatis注 ...

  8. Spring boot Mybatis 整合(注解版)

    之前写过一篇关于springboot 与 mybatis整合的博文,使用了一段时间spring-data-jpa,发现那种方式真的是太爽了,mybatis的xml的映射配置总觉得有点麻烦.接口定义和映 ...

  9. 关于Mybatis的@Param注解 及 mybatis Mapper中各种传递参数的方法

    原文:https://blog.csdn.net/mrqiang9001/article/details/79520436 关于Mybatis的@Param注解   Mybatis 作为一个轻量级的数 ...

随机推荐

  1. (转)C++ 自由存储区是否等价于堆?

      “free store” VS “heap” 当我问你C++的内存布局时,你大概会回答: “在C++中,内存区分为5个区,分别是堆.栈.自由存储区.全局/静态存储区.常量存储区”. 如果我接着问你 ...

  2. 移动端适配插件(flexible.js)

    ;(function(win, lib) { var doc = win.document; var docEl = doc.documentElement; var metaEl = doc.que ...

  3. (fields.E130) DecimalFields must define a 'decimal_places' attribute.

    DecimalField类型:固定精度的十进制数,一般用来存金额相关的数据.额外的参数包括DecimalField.max_digits(整个数字的长度)和DecimalField.decimal_p ...

  4. iOS图像处理之Core Graphics和OpenGL ES初见

    http://www.jianshu.com/p/f66a7ca326dd iOS支持两套图形API族:Core Graphics/QuartZ 2D 和OpenGL ES.OpenGL ES是跨平台 ...

  5. Pollard_rho 因数分解

    Int64以内Rabin-Miller强伪素数测试和Pollard 因数分解的算法实现 选取随机数\(a\) 随机数\(b\),检查\(gcd(a - b, n)\)是否大于1,若大于1则\(a - ...

  6. 【HAOI2010】工厂选址题解

    题目描述 某地区有m座煤矿,其中第i号矿每年产量为ai吨,现有火力发电厂一个,每年需用煤b吨,每年运行的固定费用(包括折旧费,不包括煤的运费)为h元,每吨原煤从第i号矿运到原有发电厂的运费为Ci0(i ...

  7. 利用SQL模糊匹配来验证字段是否是日期格式

    最近需要验证数据仓库某个字段是否转化成某种日期格式,比如时间戳格式 ‘2016-05-03 23:21:35.0‘, 但是DB2不支持REGEXP_LIKE(匹配)函数,所以需要重新想其他办法. 最后 ...

  8. react使用echarts地图实现中国地图大区展示

    日常项目中经常会用到百度地图或者echarts图标展示,今天给大家展示的是如何在react开发项目中使用百度echars的地图展示,把中国地图分为东北大区.华东大区.华南大区.华西大区.华中大区以及华 ...

  9. vue项目出现空格警告的原因及其解决办法

    原因: 因为你的Webpack 配置中大概是使用了 eslint-loader,这是用来规范代码风格的,在多人协作或大项目中推荐使用,不想要则可以在 webpack.config.js 中去掉.esl ...

  10. #leetcode刷题之路37-解数独

    编写一个程序,通过已填充的空格来解决数独问题.一个数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次.数字 1-9 在每一列只能出现一次.数字 1-9 在每一个以粗实线分隔的 3x3 宫内只 ...