zoukankan      html  css  js  c++  java
  • MyBatis的应用

    a)首先先导入固定的jar包

    b)添加mybatis配置文件mybatis-config.xml

    1、添加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>
             <setting name="cacheEnabled" value="true" />  <!-- 缓存 -->
            <setting name="useGeneratedKeys" value="true" /> <!--  自动获取主键 -->
            <setting name="defaultExecutorType" value="REUSE" /> 
         </settings>
        <!-- 配置别名 -->
         <typeAliases>
             <typeAlias alias="User" type="com.sdtg.system.bean.User"/>
             <typeAlias alias="Dept" type="com.sdtg.system.bean.Dept"/>
             <typeAlias alias="UserDept" type="com.sdtg.system.bean.UserDept"/>
             <typeAlias alias="Module" type="com.sdtg.system.bean.Module"/>
             <typeAlias alias="Privilege" type="com.sdtg.system.bean.Privilege"/>
             <typeAlias alias="Role" type="com.sdtg.system.bean.Role"/>
             <typeAlias alias="RolePrivilege" type="com.sdtg.system.bean.RolePrivilege"/>
             <typeAlias alias="OperateLog" type="com.sdtg.system.bean.OperateLog"/>
             <typeAlias alias="UserPrivilege" type="com.sdtg.system.bean.UserPrivilege"/>
             <typeAlias alias="WorkPlan" type="com.sdtg.plan.bean.WorkPlan"/>
             <typeAlias alias="Notepad" type="com.sdtg.office.bean.Notepad"/>
             <typeAlias alias="Onduty" type="com.sdtg.office.bean.Onduty"/>
             <typeAlias alias="Company" type="com.sdtg.contacts.bean.Company"/>
             <typeAlias alias="News" type="com.sdtg.contacts.bean.News"/>
             <typeAlias alias="Customer" type="com.sdtg.contacts.bean.Customer"/>
             <typeAlias alias="Files" type="com.sdtg.file.bean.Files"/>
         </typeAliases>
         <!-- 配置mappers -->
         <!-- mappers元素是包含所有mapper(映射器)的列表,这些mapper的XML文件包含SQL代码和映射定义信息。 -->
         <mappers>
             <mapper resource="com/sdtg/system/dao/User.xml"/>
            <mapper resource="com/sdtg/system/dao/Dept.xml"/>
            <mapper resource="com/sdtg/system/dao/Module.xml"/>
            <mapper resource="com/sdtg/system/dao/Privilege.xml"/>
            <mapper resource="com/sdtg/system/dao/Role.xml"/>
            <mapper resource="com/sdtg/system/dao/OperateLog.xml"/>
            <mapper resource="com/sdtg/plan/dao/WorkPlan.xml"/>
            <mapper resource="com/sdtg/office/dao/Notepad.xml"/>
            <mapper resource="com/sdtg/office/dao/Onduty.xml"/>
            <mapper resource="com/sdtg/contacts/dao/Company.xml"/>
            <mapper resource="com/sdtg/contacts/dao/News.xml"/>
            <mapper resource="com/sdtg/contacts/dao/Customer.xml"/>
            <mapper resource="com/sdtg/file/dao/Files.xml"/>
         </mappers>
     </configuration>

    2、创建对应的实体对象

    对应的java代码

     1 package com.sdtg.contacts.bean;
     2 
     3 import java.io.Serializable;
     4 
     5 import javax.persistence.Column;
     6 import javax.persistence.Entity;
     7 import javax.persistence.GeneratedValue;
     8 import javax.persistence.Id;
     9 import javax.persistence.Table;
    10 
    11 import org.hibernate.annotations.GenericGenerator;
    12 
    13 @Entity
    14 @Table(name = "company") // 映射数据库中表的表名
    15 public class Company implements Serializable {
    16 
    17     private static final long serialVersionUID = -7746115557660768065L;
    18 
    19     @Id
    20     @Column(name = "c_id") //映射company表的c_id列
    21     @GenericGenerator(name = "idGenerator", strategy = "identity")//name属性指定生成器名称,strategy属性指定具体生成器的类名。
    22     @GeneratedValue(generator = "idGenerator")
    23     private Integer id;//主键
    24     
    25     @Column(name = "c_name")
    26     private String name;//名称
    27     
    28     @Column(name = "c_address")
    29     private String address;//地址
    30     
    31     @Column(name = "c_tel")
    32     private String tel;//电话
    33 
    34     public Company() {
    35         super();    
    36     }
    37 
    38     public Integer getId() {
    39         return id;
    40     }
    41 
    42     public void setId(Integer id) {
    43         this.id = id;
    44     }
    45 
    46     public String getName() {
    47         return name;
    48     }
    49 
    50     public void setName(String name) {
    51         this.name = name;
    52     }
    53 
    54     public String getAddress() {
    55         return address;
    56     }
    57 
    58     public void setAddress(String address) {
    59         this.address = address;
    60     }
    61 
    62     public String getTel() {
    63         return tel;
    64     }
    65 
    66     public void setTel(String tel) {
    67         this.tel = tel;
    68     }
    69     
    70     
    71 }
    View Code

    3、创建接口和对应的定义操作company表的sql映射文件Company.xml(以company为例)

    接口提供简单的增删改查数据的信息

    package com.sdtg.contacts.dao;
    
    import java.util.List;
    import java.util.Map;
    
    import org.springframework.stereotype.Repository;
    
    import com.sdtg.contacts.bean.Company;
    
    @Repository //标注一个DAO类组件类
    public interface CompanyDao {
        
        /**
         * 查询
         * @param map
         * @return
         */
        public abstract List<Company> find(Map<String, Object> map);
        
        /**
         * 分页查询
         * @param map
         * @return
         */
        public abstract List<Company> findPage(Map<String, Object> map);
        
        /**
         * 查询条数
         * @param map
         * @return
         */
        public abstract Integer findCount(Map<String, Object> map);
        
        /**
         * id查询
         * @param id
         * @return
         */
        public abstract Company findById(Integer id);
        
        /**
         * 添加
         * @param company
         */
        public abstract void add(Company company);
        
        /**
         * 删除
         * @param id
         */
        public abstract void delete(Integer id);
        
        /**
         * 修改
         * @param company
         */
        public abstract void update(Company company);
    
    }

    Company.xml文件运用sql语句进行对数据信息的增删改查

    <?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.sdtg.contacts.dao.CompanyDao">
        
        <!-- 字段 -->
        <sql id="field">
            c.c_id as 'id',
            c.c_name as 'name',
            c.c_address as 'address',
            c.c_tel as 'tel'
        </sql>
        
        <!-- 条件 -->
        <sql id="sql">
            <if test="name != null and name != ''">
                and (c.c_name like '%${name}%' or c.c_address like '%${name}%' or c.c_tel like '%${name}%')
            </if>
        </sql>
        
        <!-- 查询 -->
        <select id="find" parameterType="Map" resultType="Company">
            select <include refid="field"/>
            from company c
            where 1=1 <include refid="sql"/>
            order by c.c_id desc
        </select>
        
        <!-- 分页查询 -->
        <select id="findPage" parameterType="Map" resultType="Company">
            select <include refid="field"/>
            from company c
            where 1=1 <include refid="sql"/>
            order by c.c_id desc
            limit ${startIndex}, ${pageSize}
        </select>
        
        <!-- 查询条数 -->
        <select id="findCount" parameterType="Map" resultType="Integer">
            select count(c.c_id)
            from company c
            where 1=1 <include refid="sql"/>
        </select>
        
        <!-- id查询 -->
        <select id="findById" parameterType="Integer" resultType="Company">
            select <include refid="field"/>
            from company c
            where c.c_id = #{id}
        </select>
        
        <!-- 添加 -->
        <insert id="add" parameterType="Company">
            insert into company(
                c_name,
                c_address,
                c_tel
            )values(
                #{name},
                #{address},
                #{tel}
            )
        </insert>
        
        <!-- 删除 -->
        <delete id="delete" parameterType="Integer">
            delete from company where c_id = #{id}
        </delete>
        
        <!-- 修改 -->
        <update id="update" parameterType="Company">
            update company
            <set>
                <if test="name != null">
                    c_name = #{name},
                </if>
                <if test="address != null">
                    c_address = #{address},
                </if>
                <if test="tel != null">
                    c_tel = #{tel},
                </if>
            </set>
            where c_id = #{id}
        </update>
        
    </mapper>

    然后映射到mybatis-config.xml配置文件

    我连接数据库是运用spring配置文件来连接数据库,运用sqlsessionFactory

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
          http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
          http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
          http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
        
        <!-- 启用Spring注解 -->
        <context:annotation-config/>
        
        <!-- 自动扫描注解类 -->
        <context:component-scan base-package="com.sdtg"/>
        
        <context:property-placeholder location="classpath:jdbc.properties" />
        
        <!-- 自动扫描Mapper接口 --> 
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.sdtg"/>
        </bean>
        
        <!-- 数据源 在spring里面配置数据库  -->
        <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource">
            <property name="driverClass" value="${jdbc.driver}" />
            <property name="jdbcUrl" value="${jdbc.url}" />
            <property name="username" value="${jdbc.username}" />
            <property name="password" value="${jdbc.password}" />
        </bean> 
        
        <!-- Sql Session工厂 --><!-- 映射到mybatis.xml文件-->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/> 
            <property name="configLocation" value="classpath:mybatis-config.xml"/>
        </bean>
        
        <!-- Sql Session -->
        <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
            <constructor-arg index="0" ref="sqlSessionFactory" />
        </bean>
        
        <!-- hibernate 映射实体类里面,用注解的方式实现自动建表的功能 -->
        <bean id="sessionFactory" name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="packagesToScan" value="com.sdtg" />
            <property name="hibernateProperties">
                <props>
                    <!-- Hibernate方言 -->
                    <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                    <!-- 是否输出Sql语句 -->
                    <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                    <!-- 当前Session策略类 -->
                    <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
                    <!-- 格式化Sql语句 -->
                    <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
                    <!-- 开启后,Hibernate将收集有助于性能调节的统计数据 -->
                    <prop key="hibernate.generate_statistics">${hibernate.generate_statistics}</prop>
                    <!-- 自动创建数据库表 -->
                    <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
                </props>
            </property>
        </bean>
        
        <!-- 事物 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>
        <tx:annotation-driven transaction-manager="transactionManager"/>
    
    </beans>

     补充:

    service和控制层的源码

    package com.sdtg.contacts.service;
    
    import java.util.List;
    import java.util.Map;
    
    import javax.annotation.Resource;
    
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    
    import com.sdtg.contacts.bean.Company;
    import com.sdtg.contacts.dao.CompanyDao;
    import com.sdtg.utils.ConvertUtils;
    import com.sdtg.utils.Page;
    
    @Service //标注一个业务逻辑组件类
    @Transactional
    public class CompanyService {
    
        @Resource
        private CompanyDao dao;
        
        /**
         * 查询
         * @param map
         * @return
         */
        public List<Company> find(Map<String, Object> map){
            try {
                
                return dao.find(map);
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
        
        /**
         * 分页查询
         * @param map
         * @return
         */
        public Page<Company> findPage(Map<String, Object> map){
            try {
                Page<Company> page = new Page<Company>();
                page.setTotalCount(dao.findCount(map));
                page.setCurrPage(ConvertUtils.stringToInteger(map.get("currPage").toString()));
                map.put("startIndex", page.getStartIndex());
                map.put("pageSize", page.getPageSize());
                page.setList(dao.findPage(map));
                return page;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
        
        /**
         * id查询
         * @param id
         * @return
         */
        public Company findById(Integer id){
            try {
                return dao.findById(id);
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
        
        /**
         * 添加
         * @param company
         */
        public Boolean add(Company company){
            try {
                dao.add(company);
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
        
        /**
         * 删除
         * @param id
         */
        public Boolean delete(Integer id){
            try {
                dao.delete(id);
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
        
        /**
         * 修改
         * @param company
         */
        public Boolean update(Company company){
            try {
                dao.update(company);
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
    }

    控制层:

    package com.sdtg.contacts.controller;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.annotation.Resource;
    import javax.servlet.http.HttpServletRequest;
    
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.sdtg.contacts.bean.Company;
    import com.sdtg.contacts.service.CompanyService;
    import com.sdtg.system.service.OperateLogService;
    import com.sdtg.utils.Page;
    
    @Controller  //类似Struts的Action,标注一个控制器组件类
    public class CompanyController {
    
        @Resource  //命名为'setCompanyService'的方法被用来处理名为'ompanyService'的属性。
        private CompanyService companyService;
        
        @Resource
        private OperateLogService operateLogService;
        
        /**
         * 查询公司
         * @param request
         * @param result
         * @param currPage
         * @param name
         * @return
         */
        @RequestMapping(value = "companyList") // 请求url地址映射,类似Struts的actiohn-mapping,直接将返回值返回到页面
        public ModelAndView companyList(HttpServletRequest request, String result, String currPage, String name){
            // request和response不必非要出现在方法中,如果用不上的话可以去掉
            // 参数的名称是与页面控件的name相匹配,参数类型会自动被转换
            System.out.println("进入查询功能");
            
            ModelAndView mav = new ModelAndView();  
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("name", name); //在jsp页面中可直通过${name}获得到值, map.put()相当于request.setAttribute方法。
            map.put("currPage", currPage != null ? currPage : 1);
            
            Page<Company> page = companyService.findPage(map);
            mav.addObject("companyList",page.getList());
            System.out.println("进入分页查询");
            mav.addObject("page",page);
            
            mav.addObject("result",result);//增删改的结果
            //返回查询条件
            mav.addObject("name",name);
            
            mav.setViewName("contacts/company");
            return mav;  //
        }
        
        /**
         * 添加公司
         * @return
         */
        @RequestMapping(value = "companyAdd")
        public ModelAndView companyAdd(){
            ModelAndView mav = new ModelAndView();
            mav.setViewName("contacts/company_form");
            return mav;
        }
        
        /**
         * 修改公司
         * @param id
         * @return
         */
        @RequestMapping(value = "companyUpdate")
        public ModelAndView companyUpdate(Integer id){
             // 同样支持参数为表单对象,类似于Struts的ActionForm,Integer id不需要任何配置,直接写即可
            ModelAndView mav = new ModelAndView(); // 采用重定向方式跳转页面
            mav.addObject("company", companyService.findById(id));
            mav.setViewName("contacts/company_form"); 
            return mav;
        }
        
        /**
         * 保存公司
         * @param request
         * @param company
         * @return
         */
        @RequestMapping(value = "companySave")
        public ModelAndView companySave(HttpServletRequest request, Company company){
            ModelAndView mav = new ModelAndView();
            Boolean flag;
            if(null == company.getId()){//添加
                flag = companyService.add(company);
                operateLogService.add(request, "添加公司:"+company.getName());
            } else {//修改
                flag = companyService.update(company);
                operateLogService.add(request, "修改公司:id="+company.getId());
            }
            mav.setViewName("redirect:companyList.do?result="+flag);
            return mav;
        }
        
        /**
         * 删除公司
         * @param request
         * @param id
         * @return
         */
        @RequestMapping(value = "companyDelete")
        public ModelAndView companyDelete(HttpServletRequest request, Integer id){
            ModelAndView mav = new ModelAndView();
            Boolean flag = companyService.delete(id);
            if(flag){
                operateLogService.add(request, "删除公司:id="+id);
            }
            mav.setViewName("redirect:companyList.do?result="+flag);
            return mav;
        }
        
        
        
        
    }
  • 相关阅读:
    npm install报错Error: ENOENT
    hibernate hql
    mysql授权
    撤销git reset soft head操作
    nodejs&npm等概念梳理
    Java类中中文问题
    采用MANIFEST.MF之jar报错ClassNotFoundException解法
    EChart和G2比较
    牛客OI测试赛1
    Codeforces Round #340 (Div.2)
  • 原文地址:https://www.cnblogs.com/zhoudi/p/6120847.html
Copyright © 2011-2022 走看看