• Mybatis项目搭建


    一、Jar包准备

    核心包:mybatis-3.2.7.jar

    核心包依赖的其他包:

    asm-3.3.1.jar

    cglib-2.2.2.jar

    commons-logging-1.1.1.jar

    javassist-3.17.1-GA.jar

    log4j-1.2.17.jar

    log4j-api-2.0-rc1.jar

    log4j-core-2.0-rc1.jar

    slf4j-api-1.7.5.jar

    slf4j-log4j12-1.7.5.jar

    驱动包:

    mysql-connector-java-8.0.15.jar

    二、在项目根目录新建lib文件夹,将以上jar导入文件夹,设为模块依赖的运行环境

     

    name:自定义即可

    Level:Module Library即可(当然可以范围更大一点Global、Project,没必要)

    Add to module:目标模块,当前模块名即可

    设置成功后每个jar前会多出一个下拉三角符号,表示可以查看jar中的内容了。

    二、包结构

    web项目之前暂时不用controller层和service层

    1、controller层:

    别名:web层

    用途:控制层,负责具体模块的业务流程控制。需要调用service逻辑设计层的接口来控制业务流程。因为service中的方法是我们使用到的,controller通过接收前端H5或者App传过来的参数进行业务操作,再将处理结果返回到前端。

    2、mapper层:

    别名:dao层。存放mapper接口和对应的xml配置文件(注意接口名称必须和配置文件名称一致

    用途:对数据库进行数据持久化操作,它的方法语句是直接针对数据操作的,主要实现一些增删改查操作,在mybatis中方法主要与xml内一一映射。

    public interface EmployeeMapper {
      /**
       * 此处定义方法
       */
      List<Employee> findAllEmployee();
    }
    <?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.sa.mapper.EmployeeMapper">
        <!--此处写sql语句
            id="findAllEmoloyee" >>> id写接口中对应的方法名
            resultType="com.sa.pojo.Employee" >>> 也可以使用别名resultType="employee"
            注意:resultType使用全路径名必须写对
        -->
        <select id="findAllEmployee" resultType="com.sa.pojo.Employee">
            select * from employee
        </select>
    </mapper>

    mapper接口和xml文件可以有多种方法及查询语句,此处只列举一例

    3、pojo层:

    别名:model层,domain层(也有写作entity的)

    用途:实体类层,用于存放实体类。与数据库中的属性值基本保持一致,实现get和set的方法。

    数据库表格属性信息:

    /**
     * 实体类 
     */
    public class Employee {
      //属性与数据库中字段名保持一致
      private String empid;
      private String password;
      private Integer deptno;
      private Integer posid;
      private String mgrid;
      private String realname;
      private String sex;
      private Date birthdate;
      private Date hiredate;
      private Date leavedate;
      private Integer onduty;
      private Integer emptype;
      private String phone;
      private String qq;
      private String emercontactperson;
      private String idcard;
      //提供构造方法
      public Employee() {
      }
    
      public Employee(String empid, String password, Integer deptno,
                      Integer posid, String mgrid, String realname, String sex,
                      Date birthdate, Date hiredate, Date leavedate,
                      Integer onduty, Integer emptype, String phone, String qq,
                      String emercontactperson, String idcard) {
        this.empid = empid;
        this.password = password;
        this.deptno = deptno;
        this.posid = posid;
        this.mgrid = mgrid;
        this.realname = realname;
        this.sex = sex;
        this.birthdate = birthdate;
        this.hiredate = hiredate;
        this.leavedate = leavedate;
        this.onduty = onduty;
        this.emptype = emptype;
        this.phone = phone;
        this.qq = qq;
        this.emercontactperson = emercontactperson;
        this.idcard = idcard;
      }
      //提供get取值和set赋值方法
      public String getEmpid() {
        return empid;
      }
    
      public void setEmpid(String empid) {
        this.empid = empid;
      }
    
      public String getPassword() {
        return password;
      }
    
      public void setPassword(String password) {
        this.password = password;
      }
    
      public Integer getDeptno() {
        return deptno;
      }
    
      public void setDeptno(Integer deptno) {
        this.deptno = deptno;
      }
    
      public Integer getPosid() {
        return posid;
      }
    
      public void setPosid(Integer posid) {
        this.posid = posid;
      }
    
      public String getMgrid() {
        return mgrid;
      }
    
      public void setMgrid(String mgrid) {
        this.mgrid = mgrid;
      }
    
      public String getRealname() {
        return realname;
      }
    
      public void setRealname(String realname) {
        this.realname = realname;
      }
    
      public String getSex() {
        return sex;
      }
    
      public void setSex(String sex) {
        this.sex = sex;
      }
    
      public Date getBirthdate() {
        return birthdate;
      }
    
      public void setBirthdate(Date birthdate) {
        this.birthdate = birthdate;
      }
    
      public Date getHiredate() {
        return hiredate;
      }
    
      public void setHiredate(Date hiredate) {
        this.hiredate = hiredate;
      }
    
      public Date getLeavedate() {
        return leavedate;
      }
    
      public void setLeavedate(Date leavedate) {
        this.leavedate = leavedate;
      }
    
      public Integer getOnduty() {
        return onduty;
      }
    
      public void setOnduty(Integer onduty) {
        this.onduty = onduty;
      }
    
      public Integer getEmptype() {
        return emptype;
      }
    
      public void setEmptype(Integer emptype) {
        this.emptype = emptype;
      }
    
      public String getPhone() {
        return phone;
      }
    
      public void setPhone(String phone) {
        this.phone = phone;
      }
    
      public String getQq() {
        return qq;
      }
    
      public void setQq(String qq) {
        this.qq = qq;
      }
    
      public String getEmercontactperson() {
        return emercontactperson;
      }
    
      public void setEmercontactperson(String emercontactperson) {
        this.emercontactperson = emercontactperson;
      }
    
      public String getIdcard() {
        return idcard;
      }
    
      public void setIdcard(String idcard) {
        this.idcard = idcard;
      }
    }

    4、service层

    用途:业务service层,给controller层的类提供接口进行调用。一般就是自己写的方法封装起来,就是声明一下,具体实现在serviceImpl中。

    public interface EmployeeService {
      /**
       * service层负责处理业务逻辑
       */
      List<Employee> findAllEmployee();
    }
    public class EmployeeServiceImpl implements EmployeeService {
      @Override
      public List<Employee> findAllEmployee() {
        SqlSession session = MybatisUtil.getSession();
        EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
        List<Employee> allEmployee = mapper.findAllEmployee();
        session.commit();
        MybatisUtil.closed();
        return allEmployee;
      }
    }

    5、工具类

    编写工具类MybatusUtil

    /**
     * ThreadLocal处理 保证一个请求内使用的SqlSession对象的一种技术处理
     * 在一次请求中如果调用了多个service 为了保证多个service使用同一sqlSession做的技术处理
     * 同时新增了close方法 用于释放sqlSession
     * 后期Spring中会在spring中控制sqlSession对象的使用,此种写法会被其他写法代替 也不会再有MybatisUtil工具类
     * ThreadLocal可以简单理解为 同一个请求 同一个线程内部的 一个集合
     */
    public class MybatisUtil {
      private static SqlSessionFactory factory = null;
      private static ThreadLocal<SqlSession> th = new ThreadLocal<>();
      static {
        InputStream inputStream = null;
        try {
          inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
          factory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
      //获得session对象
      public static SqlSession getSession(){
        SqlSession sqlSession = th.get();
        if (sqlSession == null){
          sqlSession = factory.openSession();
          th.set(sqlSession);
        }
        return th.get();
      }
      //关闭session对象
      public static void closed(){
        SqlSession sqlSession = th.get();
        if (sqlSession != null){
          sqlSession.close();
        }
        th.set(null);
      }
    }

    三、配置文件

    1、连接数据库配置文件jdbc.properties

    #加载驱动
    driver=com.mysql.cj.jdbc.Driver
    #加载数据库
    url=jdbc:mysql://数据库url
    #数据连接用户名
    username=连接数据库的用户名
    #数据库连接密码
    password=连接数据库用户密码

    2、日志配置文件log4j.properties

    # 这里控制日志的打印级别 和打印方式
    log4j.rootCategory=debug,CONSOLE  
    # ,LOGFILE  暂时可以不用向配置文件中打印
    # 此处根据项目包结构进行修改 log4j.logger.com.sa.mapper=debug # 这里是向控制台打印信息 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n # 这里是向文件中打印日志信息 log4j.appender.LOGFILE=org.apache.log4j.FileAppender log4j.appender.LOGFILE.File=d:/axis.log log4j.appender.LOGFILE.Append=true log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

    3、mybatis核心配置文件 sqlMapConfig.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>
    <!--
    configuration标签中的配置是有加载顺序的,没用的可以不配置但是不能把顺序弄乱
    <configuration>
    1、-properties(属性)
        -property
    2、-settings(全局配置参数)
        -setting
    3、-typeAliases(类型别名)
        -typeAliase
        -package
    4、typeHanders(类型处理器)
    5、objectFactory(对象工厂)
    6、plugins(插件)
    7、-environments(环境集合属性对象)
        -environment(环境子属性对象)
            -transactionManager(事务管理)
            -dataSource(数据源)
    8、-mappers(映射器)
        -mapper
        -package
    </configuration>
    -->
        <!--加载properties属性文件连接数据库-->
        <properties resource="jdbc.properties"/>
        <settings>
            <setting name="logImpl" value="LOG4J"/>
        </settings>
        <!--包扫描-->
        <typeAliases>
            <package name="com.sa.pojo"/>
        </typeAliases>
    
        <!--<typeHandlers></typeHandlers>
        <objectFactory type=""></objectFactory>
        <plugins>
            <plugin interceptor=""></plugin>
        </plugins>-->
    
        <!--默认连接的数据库
        根据需要修改默认要连接的数据库名和当前项目要连接的数据库名,二者名字可以一致
      --> <environments default="默认数据库名"> <environment id="要连接的数据库名"> <!--通过JDBC加载驱动--> <transactionManager type="JDBC"/> <!--使用连接池技术--> <dataSource type="POOLED"> <!--连接数据库参数--> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!--加载映射文件--> <mappers> <package name="com.sa.mapper"/> </mappers> </configuration>

    测试:

    public class Test {
      private static EmployeeService es = new EmployeeServiceImpl();
      public static void main(String[] args) {
        List<Employee> allEmployee = es.findAllEmployee();
        for (Employee employee : allEmployee){
          System.out.println(employee.getRealname());
        }
      }
    }

    结果:

    至此,一个项目结构搭建完毕。

  • 相关阅读:
    You Will Be Memorizing Things
    PowerShell与cmd
    select的一些问题。
    深刻理解数据库外键含义
    html居中问题
    jsp中嵌入的html
    jdbc连接mysql报错:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column '金厉旭' in 'field list'
    [kuangbin带你飞]专题一 简单搜索
    算法竞赛训练指南11.2 最小生成树
    [kuangbin带你飞]专题六 最小生成树
  • 原文地址:https://www.cnblogs.com/sinoaccer/p/12152829.html
Copyright © 2020-2023  润新知