创建一个Spring Boot+Mybatis+Oracle的Web项目

最近学习Spring Boot,刚好复习下Mybatis,因为现在用的是Hibernate,Mybatis已经有两年没用过了。

首先我用的数据库是Oracle.

1、New Project 

2、创建完成后的目录结构如下:(如果有的同学的数据库使用的是mysql的话,可以勾选上面的mysql,Spring Boot会自动添加我们spring和mysql的依赖,当时我们自己手动添加也可以。)

3、打开我们的pom.xml文件,添加我们所用的依赖jar包

 我们此项目只需要添加两个依赖jar包

一个是Oracle驱动包(此处的Oracle驱动包是我本地的jar包,因为Oracle授权问题,mavem不提供oracleq驱动包了)

一个是C3P0连接池jar包

扫描二维码关注公众号,回复: 4815016 查看本文章
<dependency>
   <groupId>com.oracle</groupId>
   <artifactId>ojdbc14</artifactId>
   <version>10.2.0.1</version>
   <scope>provided</scope>
</dependency>

<dependency>
  <groupId>com.mchange</groupId>
  <artifactId>c3p0</artifactId>
  <version>0.9.5.2</version>
</dependency>

4、数据库DDL语句:

CREATE TABLE STUDENT
(
  SID   NUMBER(10) NOT NULL PRIMARY KEY,
  SNAME VARCHAR2(255 CHAR),
  SEX   VARCHAR2(255 CHAR)
)

create sequence STUDENT_SEQUENCE
minvalue 1
maxvalue 999999999999999999999999999
start with 21
increment by 1
cache 20;

一个是创建student表语句,一个是为该表创建一个序列语句,序列为了让表的自增主键使用。如果使用的是mysql数据库的话,可以设置主键自增,则不需要创建序列。

5、在application.properties中配置我们的项目信息

jdbc.driver = oracle.jdbc.driver.OracleDriver
jdbc.url = jdbc:oracle:thin:@127.0.0.1:1521:ORCL
jdbc.username = mw_app
jdbc.password = app

server.port = 8083

server.servlet.context-path=/spring-mybatis

6、在resource目录下创建我们的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="useGeneratedKeys" value="true"/>

        <!-- 是否使用驼峰转换 -->
        <setting name="mapUnderscoreToCamelCase" value="true" />

        <!-- 是否允许使用列标签替换列名 -->
        <setting name="useColumnLabel" value="true" />

    </settings>
    
</configuration>

7、创建我们的spring配置文件,applicationContext.xml

<?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"
       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">
    <!-- spring扫描注解的包路径 -->
    <context:component-scan base-package="com.spring.springmybatis" />
    <!-- spring加载properties文件的路径 -->
    <context:property-placeholder location="classpath:config/application.properties"/>

    <!-- C3P0连接池配置 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" >
        <property name="driverClass" value="${jdbc.driver}" />
        <property name="jdbcUrl" value="${jdbc.url}" />
        <property name="user" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="autoCommitOnClose" value="true" />
        <property name="acquireRetryAttempts" value="3" />
        <property name="initialPoolSize" value="10" />
        <property name="checkoutTimeout" value="2000" />
        <property name="maxPoolSize" value="30" />
        <property name="minPoolSize" value="10" />
    </bean>

    <!-- sessionFactory配置 -->
    <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 加载数据源Bean -->
        <property name="dataSource" ref="dataSource" />
        <!-- 加载mybatis的配置文件的路径 -->
        <property name="configLocation" value="classpath:mybatis-config.xml" />
        <!-- mapper文件所在的路径 -->
        <property name="mapperLocations" value="classpath:mapper/mapper-*.xml" />
        <!-- mybatis使用使用类别名的类所在的包路径 -->
        <property name="typeAliasesPackage" value="com.spring.springmybatis.entity" />
    </bean>

    <!-- 配置Spring扫描mybatis的信息 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 注入sessionFactory -->
        <property name="sqlSessionFactoryBeanName" value="sessionFactory" />
        <!-- 需要扫描的Dao包路径 -->
        <property name="basePackage" value="com.spring.springmybatis.dao" />
    </bean>
</beans>

项目的配置文件我们已经配置的差不多了,对配置不明白的同学可以查看mybatis的中文官方网站 http://www.mybatis.org/mybatis-3/zh/index.html   或者在下面留言。

下面我们开始编码阶段:

8、根据数据库表名创建我们的实体类Student.java,代码如下:

package com.spring.springmybatis.entity;

public class Student {

    private Integer sid;
    private String sname;
    private String sex;

    public Integer getSid() {
        return sid;
    }

    public void setSid(Integer sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Student() {
    }

    public Student(String sname, String sex) {
        this.sname = sname;
        this.sex = sex;
    }


}

9、我们创建我们的Dao接口,并创建增删改查方法;代码如下:

package com.spring.springmybatis.dao;

import com.spring.springmybatis.entity.Student;

import java.util.List;

public interface StudentDao {

    /**
     * 根据ID查询学生信息
     * @param id
     * @return Student对象
     */
    public Student queryStudent(int id);

    /**
     * 查询学生列表
     * @return
     */
    public List<Student> queryStudentList();

    /**
     * 新增学生信息
     * @param student
     * @return
     */
    public int addStudent(Student student);

    /**
     * 修改学生信息
     * @param student
     * @return
     */
    public int modifyStudent(Student student);

    /**
     * 根据ID删除学生信息
     * @param id
     * @return
     */
    public int deleteStudent(int id);

}

10、因为spring会为mybatis声明的dao接口生成的实现类,所以我们不需要手动为我们定义的Dao接口编写实现类,我们只需要编写对应的mapper配置文件,我们创建的mapper配置文件如下(这里的路径需要和spring配置文件中mapperLocation指定的路径一致):

mapper-student.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.spring.springmybatis.dao.StudentDao">

    <select id="queryStudent" resultType="Student" >
      SELECT SID,SNAME,SEX,GID
      FROM STUDENT
      WHERE SID = #{id}
    </select>
    
    <select id="queryStudentList" resultType="Student">
        SELECT *
        FROM STUDENT
    </select>

    <insert id="addStudent" parameterType="com.spring.springmybatis.entity.Student">
        <selectKey keyProperty="sid" resultType="int" order="BEFORE">
            select STUDENT_SEQUENCE.NEXTVAL
            FROM DUAL
        </selectKey>
        INSERT INTO STUDENT (sid,sname,sex)
        values (#{sid},#{sname},#{sex})
    </insert>

    <update id="modifyStudent" parameterType="Student" >
        UPDATE STUDENT
        <set>
            <if test="sname != null">sname = #{sname}</if>
            <if test="sex != null">sname = #{sex}</if>
        </set>
        WHERE SID = #{sid}
    </update>

    <delete id="deleteStudent" parameterType="int">

        DELETE FROM STUDENT
        WHERE SID = #{sid}

    </delete>

</mapper>

11、此时我们的Dao层已经编写完成了,为了和真实项目保持一直,我们这里编写一下service层的代码,让service层调用我们的dao层接口去操作数据库,StudentService.java代码如下:

package com.spring.springmybatis.service;

import com.spring.springmybatis.entity.Student;

import java.util.List;

public interface StudentService {
    /**
     * 根据ID查询学生信息
     * @param id
     * @return Student对象
     */
    public Student queryStudent(int id);

    /**
     * 查询学生列表
     * @return
     */
    public List<Student> queryStudentList();

    /**
     * 新增学生信息
     * @param student
     * @return
     */
    public int addStudent(Student student);

    /**
     * 修改学生信息
     * @param student
     * @return
     */
    public int modifyStudent(Student student);

    /**
     * 根据ID删除学生信息
     * @param id
     * @return
     */
    public int deleteStudent(int id);

}

其实现类StudentServiceImpl.java代码如下:

package com.spring.springmybatis.service.impl;

import com.spring.springmybatis.dao.StudentDao;
import com.spring.springmybatis.entity.Student;
import com.spring.springmybatis.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
@Service
public class StudentServiceImpl implements StudentService {

    @Autowired
    private StudentDao studentDao;

    @Override
    public Student queryStudent(int id) {
        System.out.println("执行查询学生信息方法");
        return studentDao.queryStudent(id);
    }

    @Override
    public List<Student> queryStudentList() {
        System.out.println("执行查询学生列表信息的方法");
        return studentDao.queryStudentList();
    }

    @Override
    public int addStudent(Student student) {
        System.out.println("执行新增学生信息的方法");
        return studentDao.addStudent(student);
    }

    @Override
    public int modifyStudent(Student student) {
        System.out.println("执行修改学生信息的方法");
        return studentDao.modifyStudent(student);
    }

    @Override
    public int deleteStudent(int id) {
        System.out.println("执行删除学生信息的方法");
        return studentDao.deleteStudent(id);
    }
}

12、下面我们为service层代码创建Junit测试方法,我们的Junit测试类代码如下:

package com.spring.springmybatis.service;

import com.spring.springmybatis.entity.Student;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;

import static org.junit.Assert.*;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:applicationContext.xml"})
public class StudentServiceTest {

    @Autowired
    private StudentService studentService;

    @Test
    @Ignore
    public void addStudent() {
        Student student = new Student("小红","女");
        assertEquals(1,studentService.addStudent(student));
    }

    @Test
    @Ignore
    public void queryStudent() {
        Student student  = studentService.queryStudent(1);
        System.out.println(student.getSname());
    }

    @Test
    public void queryStudentList() {
        List<Student> studentList = studentService.queryStudentList();
        studentList.forEach(e -> System.out.println(e.getSname()));
    }

    @Test
    @Ignore
    public void modifyStudent() {
        Student student = new Student();
        student.setSname("眉庄");
        student.setSid(1);
        assertEquals(1,studentService.modifyStudent(student));
    }

    @Test
    @Ignore
    public void deleteStudent() {
        assertEquals(1,studentService.deleteStudent(1));
    }
}

我们可以把@Ignore注解去掉,挨个进行测试

13、因为我们是Web项目,所以我把对应的Controller代码也加上了,StudentController.java代码如下:

package com.spring.springmybatis.controller;

import com.spring.springmybatis.entity.Student;
import com.spring.springmybatis.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/student")
public class StudentController {

    @Autowired
    private StudentService studentService;

    @RequestMapping("/queryStudent")
    public Student queryStudent(int id) {
        return studentService.queryStudent(id);
    }

    @RequestMapping("/queryStudentList")
    public List<Student> queryStudentList() {
        return studentService.queryStudentList();
    }

    @RequestMapping("/addStudent")
    public int addStudent(Student student) {
        return studentService.addStudent(student);
    }

    @RequestMapping("/modifyStudent")
    public int modifyStudent(Student student) {
        return studentService.modifyStudent(student);
    }

    @RequestMapping("/deleteStudent")
    public int deleteStudent(int id) {
        return studentService.deleteStudent(id);
    }

}

14、我们Spring Boot启动文件代码如下:

package com.spring.springmybatis;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.ImportResource;

import java.util.Arrays;

@ImportResource(value = {"classpath:applicationContext.xml"})
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class SpringMybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringMybatisApplication.class, args);
    }
}

15、我们通过执行Main方法启动我们的项目,在浏览器输入地址进行访问,可以看到正常返回数据

因为Spring Boot是刚接触的,听说可以不用配置创建项目,很多地方都不知道怎么用,所以可能用到的技术比较老,后面接触多了再重新写一遍少用配置的吧!

我把做完的项目结构发一下:

猜你喜欢

转载自blog.csdn.net/gaotiedun1/article/details/84956689