MyBatis 1章 入门(使用MyBatis完成CRUD)

MyBatis 1章 入门(使用MyBatis完成CRUD)

 

 

1、技术目标:

 

  • 在项目中加入MyBatis框架
  • 配置MyBatis框架
  • 完成简单的CRUD操作

 

 

2、什么是MyBatis?

 

  • MyBatis 的前身是 iBatis,iBatis一词来源于"internet"和"abatis"的组合,是一个基于Java的持久层框架
  • MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架
  • MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索
  • MyBatis使用简单的XML或注解用于配置和原始映射

 

3、使用准备

注意:本案例所使用数据库为MySQL 5.5.12

3.1)在MySQL数据库test中创建表film(电影表)并添加测试数据,SQL语句如下:

 

Sql代码   收藏代码
  1. --创建影片表  
  2. CREATE TABLE `film` (  
  3.       `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,  
  4.       `fname` varchar(50) NOT NULL,  
  5.       PRIMARY KEY (`id`)  
  6. ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;  
  7.       
  8.     INSERT INTO `film` VALUES ('1''刀见笑');  
  9.     INSERT INTO `film` VALUES ('2''加勒比海盗4');  
  10.     INSERT INTO `film` VALUES ('3''第九鹰团');  
  11.     INSERT INTO `film` VALUES ('4''速度与激情5');  
  12.     INSERT INTO `film` VALUES ('5''雷神');  
  13.     INSERT INTO `film` VALUES ('6''最爱');  
  14.     INSERT INTO `film` VALUES ('7''宇宙英雄之超银河传说');  
  15.     INSERT INTO `film` VALUES ('8''危情三日');  

 

            3.2)项目中导入jar包(本文已提供下载):

mybatis-3.0.4.jar(本案例所使用的mybaties库)

mysql-connector-java-5.1.13-bin.jar(MySQL驱动)

 

3.3)在项目中创建如下包:

com.xxx.dao(放置数据访问接口以及Mapper配置文件)

com.xxx.pojo(放置实体类)

com.xxx.test(放置测试类) 

 

3.4)加入MyBatis配置文件mybatis-config.xml放在src(类路径)下,内容如下:

 

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.     <!DOCTYPE configuration  
  3.         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  4.         "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  5.     <configuration>  
  6.         <settings>  
  7.             <!-- changes from the defaults -->  
  8.             <setting name="lazyLoadingEnabled" value="false" />  
  9.         </settings>  
  10.         <typeAliases>  
  11.             <!--这里给实体类取别名,方便在mapper配置文件中使用-->  
  12.             <typeAlias alias="Film" type="com.xxx.pojo.Film"/>  
  13.         </typeAliases>  
  14.         <environments default="development">  
  15.             <environment id="development">  
  16.                 <transactionManager type="JDBC"/>  
  17.                 <dataSource type="POOLED">  
  18.                     <property name="driver" value="com.mysql.jdbc.Driver"/>  
  19.                     <property name="url" value="jdbc:mysql://localhost:3306/test"/>  
  20.                     <property name="username" value="root"/>  
  21.                     <property name="password" value="root"/>  
  22.                 </dataSource>  
  23.             </environment>  
  24.         </environments>  
  25.         <!--这里添加的是执行CRUD操作的接口对应的配置文件(xml文件)-->  
  26.         <mappers>  
  27.             <mapper resource="com/xxx/dao/FilmMapper.xml"/>  
  28.         </mappers>  
  29.     </configuration>  

 

 

 

 

4、编写POJO类Film

代码如下:

 

Java代码   收藏代码
  1. package com.xxx.pojo;  
  2. public class Film {  
  3.       
  4.     // Fields  
  5.     private Long id;  
  6.     private String fname;  
  7.       
  8.     // Constructors  
  9.     /** default constructor */  
  10.     public Film() {  
  11.     }  
  12.       
  13.     // Property accessors  
  14.     public Long getId() {  
  15.         return this.id;  
  16.     }  
  17.   
  18.     public void setId(Long id) {  
  19.         this.id = id;  
  20.     }  
  21.   
  22.     public String getFname() {  
  23.         return this.fname;  
  24.     }  
  25.   
  26.     public void setFname(String fname) {  
  27.         this.fname = fname;  
  28.     }  
  29.   
  30. }  

 

 

 

 

5、编写数据访问(CRUD)接口FilmMapper

代码如下:

 

Java代码   收藏代码
  1. package com.xxx.dao;  
  2. import java.util.List;  
  3. import java.util.Map;  
  4. import com.xxx.pojo.Film;  
  5. /** 
  6.  * 电影信息数据访问接口 
  7.  */  
  8. public interface FilmMapper {  
  9.       
  10.     /** 
  11.      * 功能:查询所有电影 
  12.      * @return 
  13.      */  
  14.     public List<Film> getAllFilm();  
  15.       
  16.     /** 
  17.      * 功能:按编号获取电影 
  18.      * @return 
  19.      */  
  20.     public Film getFilmById(int id);  
  21.       
  22.     /** 
  23.      * 功能:查询并排序 
  24.      * @param params 
  25.      * @return 
  26.      */  
  27.     public List<Film> getAllFilmOrder(Map<String, Object> params);  
  28.       
  29.     /** 
  30.      * 功能:添加影片 
  31.      * @param film 
  32.      */  
  33.     public void insertFilm(Film film);  
  34.       
  35.     /** 
  36.      * 功能:修改影片 
  37.      * @param film 
  38.      */  
  39.     public void updateFilm(Film film);  
  40.       
  41.     /** 
  42.      * 功能:删除影片 
  43.      * @param id 
  44.      */  
  45.     public void deleteFilm(int id);  
  46.       
  47. }  

 

 

 

6、编写Mapper配置文件FilmMapper.xml

注意:FilmMapper.xml配置文件与FilmMapper接口放在同一路径下

文件代码如下:

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4.   
  5. <mapper namespace="com.xxx.dao.FilmMapper">  
  6.       
  7.     <!-- 查询所有电影信息,对应FilmMapper接口中的getAllFilm方法 -->  
  8.     <select id="getAllFilm" resultType="Film">  
  9.         select * from film  
  10.     </select>  
  11.       
  12.     <!-- 按电影编号查询电影信息,对应FilmMapper接口中的getFilmById方法 -->  
  13.     <select id="getFilmById" parameterType="int" resultType="Film">  
  14.     select * from film where id=#{id}  
  15.     </select>  
  16.       
  17.     <!-- 按要求排序 ${变量名}表示将变量的值原样输出,就是拼接字符串 -->  
  18.     <select id="getAllFilmOrder" parameterType="map" resultType="Film">  
  19.     select * from film where 11 = 1   
  20.     <if test="orderKey != null">  
  21.     order by ${orderKey}   
  22.     </if>  
  23.     </select>  
  24.       
  25.     <!-- 添加影片 -->  
  26.     <insert id="insertFilm" parameterType="Film" keyProperty="id"  
  27.         useGeneratedKeys="true">  
  28.         insert into film (fname) values (#{fname});  
  29.     </insert>  
  30.       
  31.     <!-- 修改影片 -->  
  32.     <update id="updateFilm" parameterType="Film">  
  33.         update film  
  34.         <trim prefix="set" suffixOverrides=",">  
  35.             <if test="fname != null">  
  36.                 fname = #{fname}  
  37.             </if>  
  38.         </trim>  
  39.         where id = #{id}  
  40.     </update>  
  41.       
  42.     <!-- 删除影片 -->  
  43.     <delete id="deleteFilm" parameterType="int">  
  44.         delete from film where id = #{id}  
  45.     </delete>  
  46.       
  47. </mapper>  

 

 

 

 

7、编写测试类TestMyBaties,对CRUD进行测试

代码如下:

Java代码   收藏代码
  1. package com.xxx.test;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.Reader;  
  5. import java.util.HashMap;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8. import junit.framework.TestCase;  
  9. import org.apache.ibatis.io.Resources;  
  10. import org.apache.ibatis.session.SqlSession;  
  11. import org.apache.ibatis.session.SqlSessionFactory;  
  12. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
  13. import com.xxx.dao.FilmMapper;  
  14. import com.xxx.pojo.Film;  
  15.   
  16. public class TestMyBaties extends TestCase {  
  17.       
  18.     //指定MyBatis配置文件  
  19.     private static final String RESOURCE = "mybatis-config.xml";  
  20.       
  21.     /** 
  22.      * 共6步操作完成CRUD 
  23.      * @throws IOException 
  24.      */  
  25.     public void testBaties() throws IOException{  
  26.           
  27.         //1、指定MyBaties配置文件  
  28.         Reader reader = Resources.getResourceAsReader(RESOURCE);  
  29.         //2、创建SqlSessionFactory()  
  30.         SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);  
  31.           
  32.         SqlSession session = null;  
  33.         try {  
  34.               
  35.             //3、获取SqlSession  
  36.             session = sessionFactory.openSession();  
  37.               
  38.             //4、获取DAO接口对象  
  39.             FilmMapper mapper = session.getMapper(FilmMapper.class);  
  40.               
  41.             //5、CRUD操作  
  42.               
  43.             //5.1--添加影片  
  44.             Film film = new Film();  
  45.             film.setFname("笑傲江湖");  
  46.             mapper.insertFilm(film);  
  47.             session.commit();//添加、修改、删除操作最后需要提交事务  
  48.               
  49.             //5.2--获取所有电影信息  
  50.             List<Film> filmList = mapper.getAllFilm();  
  51.               
  52.             //显示所有电影信息  
  53.             for(Film filmObj : filmList){  
  54.                   
  55.                 System.out.println("电影ID:" + filmObj.getId() + " 电影名:" + filmObj.getFname());  
  56.                   
  57.             }  
  58.               
  59.             //5.3--查询排序  
  60.             Map<String, Object> params = new HashMap<String, Object>();  
  61.             params.put("orderKey""id asc");  
  62.             filmList = mapper.getAllFilmOrder(params);  
  63.             //显示所有电影信息  
  64.             for(Film filmObj : filmList){  
  65.                   
  66.                 System.out.println("电影ID:" + filmObj.getId() + " 电影名:" + filmObj.getFname());  
  67.                   
  68.             }  
  69.               
  70.             //5.4--修改影片"笑傲江湖"为"喜剧之王"  
  71.             film = mapper.getFilmById(10);  
  72.             film.setFname("喜剧之王");  
  73.             mapper.updateFilm(film);  
  74.             session.commit();  
  75.               
  76.             //5.5--删除影片"笑傲江湖",其ID为10  
  77.             mapper.deleteFilm(10);  
  78.             session.commit();  
  79.               
  80.         } catch (Exception e) {  
  81.             e.printStackTrace();  
  82.         }finally{  
  83.               
  84.             //6、关闭SqlSession  
  85.             if(session != null){  
  86.                 session.close();  
  87.             }  
  88.         }  
  89.           
  90.     }  
  91.       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值