• 如何搭建环境---初识mybatis


    一:mybatis概念
    1:简介
           MyBatis本是apache的一个开源项目iBatis,2010年改名为 MyBatis,
           MyBatis 是一个基于Java的持久层框架。(操作数据库)
    2:优点
           1:半自动化的ORM实现(实体类和SQL语句之间建立映射关系)
           2:SQL代码从程序代码中彻底分离,可重用
           3:与JDBC相比,减少了50%以上的代码量
           4:小巧灵活、简单易学,是最简单的持久化框架
           5:提供XML标签,支持编写动态SQL
           6:提供映射标签,支持对象与数据库的ORM字段映射
    3:MyBatis缺点
         1:SQL语句编写工作量大,对开发人员有一定sql技术要求
         2:数据库移植性差(不同数据库,sql语句语法有所不同)

    *******************************************mybatis环境搭建开始******************************************

    1:导入mybatis的jar包
        mybatis-3.2.2.jar
        mysql-connector-java-5.1.25-bin.jar

    2:创建mybatis的核心配置文件(mybatis-config.xml)
       <configuration>
     <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/y2t189?useUnicode=true&amp;characterEncoding=utf-8" />  数据库的url
        <property name="username" value="root" />   用户名
        <property name="password" value="zhangjiugui" />  密码
       </dataSource>
      </environment>
     </environments>
            <!--
               dao层的mapper映射文件(xml)
            -->
     <mappers>
      <mapper resource="com/accp/y2t189/dao/UserMapper.xml" />
     </mappers>
      </configuration>

    3: 实体类

    4:数据访问的接口(dao)

       public List<User> findUsers();

    5:接口与sql语句的映射  UserMapper.xml

       命名空间必须是响应接口的全路径
       <mapper namespace="com.accp.y2t189.dao.UserMapper">
     
             id必须和接口中的方法名一致
             resultType返回值类型(返回集合的话,指定集合元素的类型)
     <select id="findUsers" resultType="com.accp.y2t189.entity.User">
      SELECT * FROM users
     </select>

       </mapper>

    *******************************************************************写好的粘贴可用*************************************************************************

    6:mybatis的工具类

        获得SqlSession
            ①:读取配置文件,创建session工厂
            ②:在session工厂里,获得session会话
        关闭session
            判断session实例是否创建,不为null,就关闭session

        /**
          * mybatis的工具类
          * 获得session
          */
         public class MybatisUtil {
     
      public static SqlSessionFactory sf;  //session工厂
     
      //获得session工厂
             static { 
              try { 
              Reader  is= Resources.getResourceAsReader("mybatis-config.xml"); 
              sf= new SqlSessionFactoryBuilder().build(is);
             } catch (Exception e) { 
                 e.printStackTrace(); 
             } 
      } 
       
      //获得session
             public static SqlSession getSession(){
               return sf.openSession();
             }
       
             //关闭session
             public static void  closeSession(SqlSession session){
          if(session !=null){
           session.close();
          }
          } 
         }

    7: 数据操作
           //获得session
           session=MybatisUtil.getSession();
           //获得接口实例
           List<User> listUser=session.getMapper(UserMapper.class).findUsers();
           //关闭session 

    *******************************************mybatis环境搭建结束******************************************
    *******************************************增删改开始***************************************************

            /**
      * 查询所有数据
      * @return
      */
     public List<User> findAll();
    ******************
            <select id="findAll" resultType="entity.User">
      SELECT * FROM users
     </select>

    **************************************************

     /**
      * 根据编号查询对象
      * @param 用户表的主键
      * @return  一个对象user
      */
     public  User findById(Integer userId);
    ******************
            <select id="findById" parameterType="Integer" resultType="entity.User">
         select * from users where  id=#{userId}
     </select>

    **************************************************

     /**
      * 增加用户信息
      * @param 一个对象数据
      * @return  数据库的影响行数
      */
     public Integer add(User user);
    ******************
            <insert id="add"  parameterType="entity.User">
           INSERT INTO users VALUES(NULL,#{userName},#{password},#{realName})
     </insert>

    **************************************************

     /**
      * 根据编号删除对象
      * @param  用户表的主键
      * @return 数据库的影响行数
      */
     public Integer delete(Integer id);
    ******************
            <delete id="delete" parameterType="Integer">
           delete from users where id=#{id}
     </delete>

    ************************************************** 

     /**
      * 修改用户信息
      * @param 一个对象数据
      * @return  数据库的影响行数
      */
     public Integer update(User user);
    ******************
            <!-- 根据属性的主键修改其他的属性值-->
            <update id="update" parameterType="entity.User">
                 update users set userName=#{userName} ,password=#{password},realName=#{realName}
                 where id=#{id}
            </update>

    ************************************************** 

     /**
      * 连表查询用户信息
             * 在从表的实体类中添加级联查询主表中的属性
             * SELECT u.*,rolename  在用户表中添加角色表的属性-角色名称
      */
      public List<User> findUserAndRole();
    ******************
             <select id="findUserAndRole" resultType="entity.User">
      SELECT u.*,rolename FROM users u INNER JOIN role  r
                    ON u.`roleid`=r.`roleid`
      </select>
    **************************************************
       
        模糊查询

        //根据角色名称,模糊查询角色列表
        public List<Role>  findRoleByRoleName(String rolename);
      
        <!--
     <select id="findRoleByRoleName" resultMap="roleMapping">
      SELECT * FROM role
      where  roleName  like  concat('%',#{rolename},'%')
     </select>
        -->
        <select id="findRoleByRoleName" resultMap="roleMapping">
      SELECT * FROM role
      where  roleName  like  "%"#{rolename}"%"
        </select>
    *******************************************增删改查结束***************************************************

  • 相关阅读:
    WC2021 游记
    TC11054
    P5904
    CF741D
    CF1467 题解
    [CTSC2008]网络管理 [树剖+整体二分]
    [HNOI2015]接水果[整体二分]
    [SDOI2010]粟粟的书架 [主席树]
    整体二分的一些见解[整体二分学习笔记]
    P2710 数列[fhq treap]
  • 原文地址:https://www.cnblogs.com/zhuhuibiao/p/9256731.html
Copyright © 2020-2023  润新知