前言

  上篇简单介绍了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. Yii日志使用

    Yii 提供了一个灵活可扩展的日志功能.记录的日志 可以通过日志级别和信息分类进行归类.通过使用 级别和分类过滤器,所选的信息还可以进一步路由到 不同的目的地,例如一个文件,Email,浏览器窗口等. ...

  2. Ubuntu16.04使用所遇问题记录

    记录笔者在使用Ubuntu系统过程中所遇到过的错误/问题和解决方案.本机系统为Ubuntu 16.04 LTS,64-bit. 目前已有的解决方案: (1)Ubuntu安装搜狗输入法 (2)Windo ...

  3. 如何访问tomcat所在服务器的其他盘符的资源。

    <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWA ...

  4. HDU 1166 【线段树 || 树状数组,单点修改 维护区间和】

    题目链接 HDU 1166 大概题意: 第一行一个整数T,表示有T组数据.每组数据第一行一个正整数N(N<=50000),表示敌人有N个工兵营地,接下来有N个正整数,第i个正整数ai代表第i个工 ...

  5. HTTP缓存机制--客户端缓存(转)

    客户端缓存 客户端侧缓存一般指的是浏览器缓存,目的就是加速各种静态资源的访问,想想现在的大型网站,随便一个页面都是一两百个请求,每天 pv 都是亿级别,如果没有缓存,用户体验会急剧下降.同时服务器压力 ...

  6. async--ajax异步传输

    如图:轨迹点组编号依赖所属路口的设置. 所以ajax是异步执行,获取到所属路口还没执行完,就已经执行到根据所述路口获取轨迹点组编号,所以获取不到轨迹点组编号. async:false改成同步执行.就没 ...

  7. localStorage和cookie操作

    localStorage和cookie操作代码: cookie: { isSupportCookie: function() { return navigator.cookieEnabled; }, ...

  8. CSS3-阴影参数基础

    box-shadow 语法:text-shadow: x-shadow y-shadow distance color; 值  描述  x-shadow  必需.水平阴影的位置.允许负值. y-sha ...

  9. 课时48.表单标签-H5(了解)

    可以自动校验输入的内容是否符合邮箱的格式,我带大家随便看几个就行了,因为大部分浏览器对这几个特性有的支持,有的不支持,所以大家只要了解就好了   

  10. ASP.Net 中的三种控件

    ---恢复内容开始--- 第一种:HTML控件 ASP.Net把HTML控件当成普通字符串渲染到浏览器端,不去检查正确性.无法在服务器端进行处理. 比如: <input111 type=&quo ...