mybatis封神之旅-实操
Posted gonghaiyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis封神之旅-实操相关的知识,希望对你有一定的参考价值。
前言
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java的POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。本教程偏重实践,需要读者动手操作来理解什么是Mybatis及Mybatis的功能。
适用人群
中小型 Web 项目开发者,需要处理SQL复杂连接的问题的技术开发者。
学习前提
学习本教程,你需要对 SQL 语言及 XML 有一定的了解。
鸣谢:http://www.yihaomen.com/article/java/302.htm
简介
什么是Mybatis?
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java 对象)映射成数据库中的记录。
orm的基本思想
无论是用过的 hibernate,Mybatis,你都可以法相他们有一个共同点:
- 从配置文件(通常是 XML 配置文件中)得到 sessionfactory.
- 由 sessionfactory 产生 session
- 在 session 中完成对数据的增删改查和事务提交等.
- 在用完之后关闭session。
- 在Java对象和数据库之间有做mapping的配置文件,也通常是xml文件。
开发环境
环境的搭建参考maven教程中的使用maven创建web项目章节。
测试:
<?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>
<typeAliases>
<typeAlias type="com.swad.domain.User" alias="User"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/springmvc-test"/>
<property name="username" value="root"/>
<property name="password" value="egilance1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/swad/mapper/UserMapper.xml"/>
</mappers>
</configuration>
package com.swad.util;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.swad.domain.User;
public class TestMybatis {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static{
try{
reader = Resources.getResourceAsReader("mybatisConfiguration.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
}catch(Exception e){
e.printStackTrace();
}
}
public static SqlSessionFactory getSession(){
return sqlSessionFactory;
}
public static void main(String[] args){
SqlSession session = sqlSessionFactory.openSession();
try{
User user = (User)session.selectList("com.swad.mapper.UserMapper.findAllUser").get(0);
//下面这种写法是有问题的,报错为:Mapped Statements collection does not contain value for
//User user = (User)session.selectList("com.swad.mapper.findAllUser").get(0);
System.out.println(user.getName());
System.out.println(user.getSalary());
}finally{
session.close();
}
}
}
以接口的方式编程
前面一章,已经搭建好了 Eclipse,Mybatis,MySql 的环境,并且实现了一个简单的查询。请注意,这种方式是用SqlSession 实例来直接执行已映射的SQL语句。而且是更好的方法,使用合理描述参数和SQL语句返回值的接口(比如 IUserOperation.class),这样现在就可以至此那个更简单,更安全的代码,没有容易发生的字符串文字和转换的错误.
package com.swad.util;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.swad.domain.User;
import com.swad.mapper.UserMapper;
public class TestMybatis {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static{
try{
reader = Resources.getResourceAsReader("mybatisConfiguration.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
}catch(Exception e){
e.printStackTrace();
}
}
public static SqlSessionFactory getSession(){
return sqlSessionFactory;
}
public static void main(String[] args){
SqlSession session = sqlSessionFactory.openSession();
try{
User user = (User)session.selectList("com.swad.mapper.UserMapper.findAllUser").get(0);
//下面这种写法是有问题的,报错为:Mapped Statements collection does not contain value for
//User user = (User)session.selectList("com.swad.mapper.findAllUser").get(0);
/*下面这种方式更好!!!
* UserMapper userMapper = session.getMapper(UserMapper.class);
User user2 = userMapper.findById(1);*/
System.out.println(user.getName());
System.out.println(user.getSalary());
}finally{
session.close();
}
}
}
实现数据的CRUD
前面已经讲到用接口的方式编程。这种方式,要注意的一个地方就是。在User.xml 的配置文件中,mapper namespace=“com.yihaomen.mybatis.inter.IUserOperation” ,命名空间非常重要,不能有错,必须与我们定义的package和接口一致。
查询数据
查询出列表,也就是返回 list, 在我们这个例子中也就是List , 这种方式返回数据,需要在 User.xml里面配置返回的类型 resultMap, 注意不是resultType,而这个resultMap 所对应的应该是我们自己配置的。
<resultMap type="com.swad.domain.User" id="user_mapping">
<id column="id" property="id" />
<result column="name" property="name" />
<result column="age" property="age" />
<result column="salary" property="salary" />
</resultMap>
<!-- 获取用户列表 -->
<select id="findAllUser" resultMap="user_mapping">
SELECT
*
FROM user u
</select>
增加数据
UserMapper.java中:
void saveUser(User user);
<!-- 新增用户 -->
<insert id="saveUser" keyColumn="id" keyProperty="id" useGeneratedKeys="true">
INSERT INTO
user(id,name,age,salary)
VALUES(#{id},#{name},#{age},#{salary})
</insert>
更新数据
void updateUser(User user);
<!-- 更改用户 -->
<insert id="updateUser">
UPDATE user
<set>
<if test="name!=null and name != '' ">
name = #{name},
</if>
<if test="age!=null and age != '' ">
age=#{age},
</if>
<if test="salary!=null and salary != '' ">
salary=#{salary}
</if>
</set>
WHERE id = #{id}
</insert>
删除数据
void deleteUserById(long id);
<!-- 删除用户 -->
<delete id="deleteUserById">
DELETE FROM user WHERE id = #{id}
</delete>
实现关联数据的查询
public List
以上是关于mybatis封神之旅-实操的主要内容,如果未能解决你的问题,请参考以下文章
Spring Cloud封神之旅-微服务与springcloud