Mybatis XML和接口注解 两种方式CURD
来源:互联网 发布:中国商学院排名知乎 编辑:程序博客网 时间:2024/06/08 07:24
mybatis CURD
1、XML的方式
过程与上一篇mybatis入门示例一致,将users表的SQL映射配置文件(userMapper.xml)修改如下,增加别的操作
<?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"><!--CURD 映射配置--><mapper namespace="userMapper"> <insert id="insertUser" parameterType="com.mybatis.hello.User"> insert into users(name, age) values(#{name}, #{age}); </insert> <delete id="deleteUser" parameterType="int"> delete from users where id=#{id} </delete> <update id="updateUser" parameterType="com.mybatis.hello.User"> update users set name=#{name},age=#{age} where id=#{id} </update> <select id="selectUser" parameterType="int" resultType="com.mybatis.hello.User"> select * from users where id=#{id} </select> <select id="selectAllUsers" resultType="com.mybatis.hello.User"> select * from users </select></mapper>
同时可修改注释部分,自由测试
package com.mybatis.hello;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 java.io.IOException;import java.io.Reader;import java.util.List;/** * Created by yanghui10 on 2016/8/3. */public class MybatisTest { public static void main(String[] args) throws IOException { String resource = "conf.xml"; //加载mybatis 的配置文件(它也加载关联的映射文件) // InputStream is=MybatisTest.class.getClassLoader().getResourceAsStream(resource); Reader reader = Resources.getResourceAsReader(resource); //构建sqlSession 的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader); //创建能执行映射文件中sql 的sqlSession SqlSession session = sessionFactory.openSession(); //映射sql 的标识字符串// String statement = "userMapper"+".selectUser"; String statement = "userMapper"+".selectAllUsers"; //执行查询返回一个唯一user 对象的sql// User user = session.selectOne(statement, 1);// int a=session.insert(statement,new User("sad",19));// session.insert(statement,new User("asd",15));// session.insert(statement,new User("d",19));// session.insert(statement,new User("fffd",14));// session.commit(); List<User> users=session.selectList(statement);// User user = session.selectOne(statement, 1); System.out.println(users); }}
注意:看到session.commit()没?
涉及insert、update、delete的DML,要手动的commit呢,注意close(这里没写session.close())方法是不会监测有木有commit,幻想close方法去commit会让你死的很惨滴。
2、接口注解的方式
相对应的,将XML方式的users表的SQL映射配置文件(userMapper.xml)去掉,创建如下sql映射的接口
package com.mybatis.hello;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 java.util.List;/** * Created by yanghui10 on 2016/8/3. */public interface UserMapper { @Insert("insert into users(name, age) values(#{name}, #{age})") public int insertUser(User user); @Delete("delete from users where id=#{id}") public int deleteUserById(int id); @Update("update users set name=#{name},age=#{age} where id=#{id}") public int updateUser(User user); @Select("select * from users where id=#{id}") public User getUserById(int id); @Select("select * from users") public List<User> getAllUser();}
同样的,在conf.xml中改为注册接口:
<mappers> <!--接口的方式 注册接口--> <mapper class="com.mybatis.hello.UserMapper"/> <!--XML的方式 注册映射配置文件--> <!--<mapper resource="userMapper"/>--></mappers>
测试代码中调用部分改为如下
// String statement = "userMapper"+".selectAllUsers";// List<User> users=session.selectList(statement); UserMapper userMapper=session.getMapper(UserMapper.class); List<User> users=userMapper.getAllUser(); System.out.println(users);
优化:可以定义一个工具类,只在加载时创建一次SqlSessionFactory对象(或者其它单例模式),因为此对象只需要一次
如下,直接由静态方法返回新的sqlSession即可
package com.mybatis.common;import com.mybatis.hello.MybatisTest;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 java.io.InputStream;import java.io.Reader;/** * * 用mybatis实现的dao层,具体核对对象是SqlSession。 *由于dao层依赖于SqlSession。而SqlSession的创建过程需要SqlSessionFactory对象, *此对象对于多次的CRUD操作只需要一个对象,所以这里引用另一个自定义的MyBatisUtils工具类。 * * Created by yanghui10 on 2016/8/3. */public class MybatisUtil { private static SqlSessionFactory sqlSessionFactory; static { String resource = "conf.xml"; //加载mybatis 的配置文件(它也加载关联的映射文件) InputStream is = MybatisTest.class.getClassLoader().getResourceAsStream(resource); //构建sqlSession 的工厂 sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); } /** * 返回一个SqlSession对象(每次返回一个新的SqlSession对象) * 若涉及多个表的操作,涉及事务的,要做到操作失败时回滚,那么建议自定义一个TransactionUtils的工具类 * 用ThreadLocal类来保存SqlSession类,这样跨多个dao操作时,确保获取的都是同一SqlSession对象。 * 然后在service层中捕获异常,再catch上用session的回滚。 */ public static SqlSession openSesison(){ return sqlSessionFactory.openSession();//使用参数 true 则为自动提交 }}
mybatis的使用确实非常简单方便,MyBatis 是支持普通SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC 代码和参数的手工设置以及对结果集的检索封装。MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和Java 的POJO(Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录。
不过要形成Spring+SpringMVC+Mybatis+Velocity以及各种服务框架和MQ等的大型架构,以及项目中每一层(dao、domain、service等)的准确划分,任然是需要探索的难点。
1 0
- Mybatis XML和接口注解 两种方式CURD
- Mybatis注解方式实现CURD
- 关于mybatis两种连接mysql的方式(注解和xml配置)
- Mybatis SQL语句的两种映射方式 mapper的xml配置和接口两种方式
- spring aop注解和xml两种方式的基础
- spring3.1xml配置和注解两种方式总结
- Mybatis学习笔记-CURD(基于注解的方式)
- 关于springboot整合mybatis,做关联查询的两种方式(注解和配置文件)
- Spring IOC 依赖注入的两种方式XML和注解
- Spring IOC 依赖注入的两种方式:XML和注解
- Spring IOC 依赖注入的两种方式XML和注解
- Spring IOC 依赖注入的两种方式XML和注解
- Spring IOC 依赖注入的两种方式XML和注解
- Spring框架实现AOP的xml和注解两种方式
- spring系列(二)——AOP的两种实现方式(xml和注解)
- spring创建策略模式的两种方式(xml配置和纯注解)
- 基于springboot搭建dubbo框架(注解和xml配置两种方式)
- spring mybatis mapper接口注解方式注入
- JAVA内部类使用
- 内部类-成员内部类-静态内部类-局部内部类
- iOS巅峰之navigationBar.hidden和navigationBarHidden区别和hidden与alpha的区别
- linux之iptables详解及配置(二)+案例
- 用eclipse建立maven工程
- Mybatis XML和接口注解 两种方式CURD
- ldconfig
- la3523+la5135
- MongoDB 3.x 中添加用户和权限控制
- POJ 3974 Palindrome(Manacher)
- DMA多知识学习应用实例
- Mysql支持的数据类型(总结)
- poj2492 A Bug's Life(并查集)
- 初来乍到的应届生