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

来源:互联网 发布:智能电网调度算法 编辑:程序博客网 时间:2024/06/02 01:09

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) NOTNULL
  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.             <settingname="lazyLoadingEnabled"value="false"/> 
  9.         </settings> 
  10.         <typeAliases> 
  11.             <!--这里给实体类取别名,方便在mapper配置文件中使用--> 
  12.             <typeAliasalias="Film"type="com.xxx.pojo.Film"/> 
  13.         </typeAliases> 
  14.         <environmentsdefault="development"> 
  15.             <environmentid="development"> 
  16.                 <transactionManagertype="JDBC"/> 
  17.                 <dataSourcetype="POOLED"> 
  18.                     <propertyname="driver"value="com.mysql.jdbc.Driver"/> 
  19.                     <propertyname="url"value="jdbc:mysql://localhost:3306/test"/> 
  20.                     <propertyname="username"value="root"/> 
  21.                     <propertyname="password"value="root"/> 
  22.                 </dataSource> 
  23.             </environment> 
  24.         </environments> 
  25.         <!--这里添加的是执行CRUD操作的接口对应的配置文件(xml文件)--> 
  26.         <mappers> 
  27.             <mapperresource="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.  

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.      

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.     <selectid="getAllFilm"resultType="Film"> 
  9.         select * from film 
  10.     </select> 
  11.      
  12.     <!-- 按电影编号查询电影信息,对应FilmMapper接口中的getFilmById方法 --> 
  13.     <selectid="getFilmById"parameterType="int"resultType="Film"> 
  14.     select * from film where id=#{id} 
  15.     </select> 
  16.      
  17.     <!-- 按要求排序 ${变量名}表示将变量的值原样输出,就是拼接字符串 --> 
  18.     <selectid="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.     <insertid="insertFilm"parameterType="Film"keyProperty="id" 
  27.         useGeneratedKeys="true"> 
  28.         insert into film (fname) values (#{fname}); 
  29.     </insert> 
  30.      
  31.     <!-- 修改影片 --> 
  32.     <updateid="updateFilm"parameterType="Film"> 
  33.         update film 
  34.         <trimprefix="set"suffixOverrides=","> 
  35.             <iftest="fname != null"> 
  36.                 fname = #{fname} 
  37.             </if> 
  38.         </trim> 
  39.         where id = #{id} 
  40.     </update> 
  41.      
  42.     <!-- 删除影片 --> 
  43.     <deleteid="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 TestMyBatiesextends TestCase { 
  17.      
  18.     //指定MyBatis配置文件 
  19.     private staticfinal 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