• MyBatis初识(通过小实例清晰认识MyBatis)


    1.MyBatis框架:

      MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

    2.MyBatis架构:

    3.上面的架构图可能难以理解,下面的图示更能清晰明白MyBatis的具体使用流程:

      废话不多说,直接贴工程代码,通过代码解释MyBatis究竟是干嘛的,工程所需要的所有java包都在下面链接中:http://pan.baidu.com/s/1kUZmpWb

    4.电影的简单增删改查工程实现:

      (1)建立数据库,建一张电影表film:

      

      (2)在工程中建立电影类Film:

      

    public class Film {
    
        // Fields
        private Long id;
        private String fname;
    
        // Constructors
        /** default constructor */
        public Film() {
        }
    
        // Property accessors
        public Long getId() {
            return this.id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getFname() {
            return this.fname;
        }
    
        public void setFname(String fname) {
            this.fname = fname;
        }
    
    }

      (3)在工程中建立电影信息数据访问接口FilmMapper.java:

      

    import java.util.List;
    import java.util.Map;
    
    import com.gnc.pojo.Film;
    
    /**
     * 电影信息数据访问接口
     */
    public interface FilmMapper {
    
        /** 
         * 功能:查询所有电影 
         * @return 
         */  
        public List<Film> getAllFilm();
        
        /**
         * 功能:按编号获取电影
         * 
         * @return
         */
        public Film getFilmById(int id);
    
    
        /**
         * 功能:添加影片
         * 
         * @param film
         */
        public void insertFilm(Film film);
    
        /**
         * 功能:修改影片
         * 
         * @param film
         */
        public void updateFilm(Film film);
    
        /**
         * 功能:删除影片
         * 
         * @param id
         */
        public void deleteFilm(int id);
    }

      (4)建立映射文件FilmMapper.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">
    
    <mapper namespace="com.gnc.dao.FilmMapper">
    
        <resultMap id="filmResultMap" type="Film">
            <id property="id" column="id" />
            <result property="fname" column="f_name" />
            <result property="fprice" column="f_price" />
        </resultMap>
    
        <!-- 查询所有电影信息,对应FilmMapper接口中的getAllFilm方法 -->
        <select id="getAllFilm" resultMap="filmResultMap">
            select * from film
        </select>
    
        <!-- 按电影编号查询电影信息,对应FilmMapper接口中的getFilmById方法 -->
        <select id="getFilmById" parameterType="int" resultMap="filmResultMap">
            select *
            from film where id=#{id}
        </select>
    
    
        <!-- 添加影片 -->
        <insert id="insertFilm" parameterType="Film" keyProperty="id"
            useGeneratedKeys="true">
            insert into film (f_name) values (#{fname});
        </insert>
    
        <!-- 修改影片 -->
        <update id="updateFilm" parameterType="Film">
            update film
            <trim prefix="set" suffixOverrides=",">
                <if test="fname != null">
                    f_name = #{fname}
                </if>
            </trim>
            where id = #{id}
        </update>
    
        <!-- 删除影片 -->
        <delete id="deleteFilm" parameterType="int">
            delete from film where id
            = #{id}
        </delete>
    
    </mapper>

      (5)建立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>
        <settings>
            <!-- changes from the defaults -->
            <setting name="lazyLoadingEnabled" value="false" />
        </settings>
        <typeAliases>
            <!--这里给实体类取别名,方便在mapper配置文件中使用 -->
            <typeAlias alias="Film" type="com.gnc.pojo.Film" />
        </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/test" />
                    <property name="username" value="root" />
                    <property name="password" value="geningchao" />
                </dataSource>
            </environment>
        </environments>
        <!--这里添加的是执行CRUD操作的接口对应的配置文件(xml文件) -->
        <mappers>
            <mapper resource="com/gnc/dao/FilmMapper.xml" />
        </mappers>
    </configuration>  

      (6)建立测试类TestMyBaties:

      

    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    
    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.gnc.dao.FilmMapper;
    import com.gnc.pojo.Film;
    
    import junit.framework.TestCase;
    
    public class TestMyBaties extends TestCase {
    
        /**
         * 共6步操作完成CRUD
         * 
         * @throws IOException
         */
        public void testBaties() throws IOException {
    
            // 指定MyBatis配置文件
            String RESOURCE = "mybatis-config.xml";
    
            // 1、指定MyBaties配置文件
            InputStream inputstream = Resources.getResourceAsStream(RESOURCE);
            // 2、创建SqlSessionFactory()
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputstream);
    
            SqlSession session = null;
            try {
    
                // 3、获取SqlSession
                session = sessionFactory.openSession();
    
                // 4、获取DAO接口对象
                FilmMapper mapper = session.getMapper(FilmMapper.class);
    
                // 5、CRUD操作
    
                // 5.1--添加影片
                Film film = new Film();
                film.setFname("笑傲江湖");
                mapper.insertFilm(film);
                session.commit();// 添加、修改、删除操作最后需要提交事务
    
                // 5.2--修改影片"笑傲江湖"为"喜剧之王"
                film = mapper.getFilmById(1);
                film.setFname("喜剧之王");
                mapper.updateFilm(film);
                session.commit();
    
                // 5.3--删除影片"笑傲江湖",其ID为14
    //            mapper.deleteFilm(1);
    //            session.commit();
    
                // 5.4--获取所有电影信息
                List<Film> filmList = mapper.getAllFilm();
    
                // 显示所有电影信息
                for (Film filmObj : filmList) {
    
                    System.out.println("电影ID:" + filmObj.getId() + " 电影名:" + filmObj.getFname());
    
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                // 6、关闭SqlSession
                if (session != null) {
                    session.close();
                }
            }
    
        }
    
    }

    5.工程流程解释:

      首先,电影系统中,我们要先有一个数据库用来存放电影信息,即第一步;然后需要有一个电影类,也就是第二步;接着,需要有一个对电影信息访问控制的接口,即第三步;接下来,我们一般的做法就是再建立一个java类来实现刚才的接口,实现的过程也就是sql操作,采用MyBatis框架,就将这个过程放在了xml映射文件中,即第四步;昨晚上面步骤之后,就需要进行配置MyBatis信息,即第五步,该步包括连接数据库,加载映射文件,以及给实体类取一些别名以便映射文件中简单实用.上述步骤走完之后,就可以进行测试了,测试过程分为三步:第一,加载mybatis-config.xml配置文件,获取SqlSessionFactory;第二,获取session;第三,获取DAO接口对象FilmMapper;然后就可以进行平常的操作了.

    以上是本人个人观点,如有不对,希望共同交流!

  • 相关阅读:
    用例图解析
    A B C D类网络地址
    B-树特征
    常用的中间代码
    UML图
    关于文件索引的一道习题
    数据流图的一些原则
    系统总线
    各种排序方法的时间复杂度、空间复杂度和稳定性统计表
    模拟银行自助终端系统
  • 原文地址:https://www.cnblogs.com/geningchao/p/6628243.html
Copyright © 2020-2023  润新知