前言

  上篇简单介绍了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. hibernate mysql 分页时报错 显示的代码和sql server 类似 select top 1……

    [ERROR][com.alibaba.druid.filter.stat.StatFilter]merge sql error, dbType mysql, sql : select top 1 d ...

  2. Handler的简单使用介绍

    Handler在android程序开发中使用的非常频繁.我们知道android是不允许在子线程中更新UI的,这就需要借助Handler来实现,那么你是否想过为什么一定要这个这样子做呢?而且Handle ...

  3. ZooKeeper介绍与环境搭建

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...

  4. jQuery 实现改变图片指定区域的颜色

    javascript本身无法改变图片的颜色,不过我们可以通过一些技巧来实现一样的效果. 1.首先我们要知道图片哪些区域需要改变颜色,这里我们可以用执点地图的方法来弄 例1: <img src=& ...

  5. UVa 12169 - Disgruntled Judge(拓展欧几里德)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  6. BZOJ3238:[AHOI2013]差异(SAM)

    Description Input 一行,一个字符串S Output 一行,一个整数,表示所求值 Sample Input cacao Sample Output 54 HINT 2<=N< ...

  7. 【[TJOI2014]上升子序列】

    这本质上是一个\(dp\) 如果没有"两个上升子序列相同,那么只需要计算一次"这一个性质,那么就很好做了,我们用\(dp[i]\)表示以\(i\)结尾的上升子序列个数,那么就有\( ...

  8. springmvc小结(上)

    1.springmvc的整体结构以及流程 ①.前端控制器:只需要在web.xml文件中配置即可 作用:接受请求,处理响应结果,转发器,中央处理器 ②.处理器映射器:根据请求的url找到相应的Handl ...

  9. CToolBarCtrl工具栏设置总结(转)

    (一)工具条控制的主要功能 所谓工具条就是具有位图和分隔符组成的一组命令按钮,位图按钮部分可以是下推按钮.检查盒按钮.无线按 钮等.工具条对象类派生于主窗口架框类CframeWnd或CMDIFrame ...

  10. sql传统的拼接带来的危害

    现在大家来学习下sql是如何注入的,传统的拼接字符串会造成 注入形式就是在变量那使用<1=1>这样查询无论怎样都是正确的 -- var sql = "select name fr ...