SSM项目第2讲

简单的框架搭建好后,就要开始操作数据库了

从框架到数据库操作

搭建数据源

MyBatis就是ssm中的m,简化数据库操作的框架

  1. 首先在spring.xml引入阿里的Druid框架

    		<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
            <!--驱动名称-->
            <property name="driverClassName" value="${jdbc.driver}"/>
            <!--访问地址-->
            <property name="url" value="${jdbc.url}"/>
            <!--用户名-->
            <property name="username" value="${jdbc.username}"/>
            <!--密码-->
            <property name="password" value="${jdbc.password}"/>
            <!--初始大小-->
            <property name="initialSize" value="2"/>
            <!--最大连接池数量-->
            <property name="maxActive" value="40"/>
            <!-- 连接池最小空闲 -->
            <property name="minIdle" value="2"/>
            <!--获取连接时最大等待时间,单位毫秒。-->
            <property name="maxWait" value="15000"/>
            <!--用来检测连接是否有效的sql,要求是一个查询语句。-->
            <property name="validationQuery" value="select 1"/>
            <!--申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。-->
            <property name="testOnBorrow" value="false"/>
            <!--建议配置为true,不影响性能,并且保证安全性。-->
            <property name="testWhileIdle" value="true"/>
            <!--配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒-->
            <property name="timeBetweenEvictionRunsMillis" value="120000"/>
            <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
            <property name="minEvictableIdleTimeMillis" value="300000"/>
            <!--对于长时间不使用的连接强制关闭  -->
            <property name="removeAbandoned" value="true"/>
            <!--超过30分钟开始关闭空闲连接(秒为单位)  -->
            <property name="removeAbandonedTimeout" value="1800"/>
            <!--将当前关闭动作记录到日志-->
            <property name="logAbandoned" value="true"/>
            <!--自动提交,如果不启用事物可设置为true -->
            <property name="defaultAutoCommit" value="false"/>
            <property name="connectionInitSqls" value="set names utf8mb4;"/>
        </bean>
       		
    
  2. 使用Navicat for MySQL快速登录服务,并且开始新建表格

    ==具体使用请结合实际,此文接下来都是以增删查改课程举例==

  3. 新建com->conf->db.properties,这是druid也就是阿里使用的架包的配置文件。需要改其中jdbc下的url,username和password成自己的数据库地址和管理员账号,这一步相当于db用户登录了数据库新建了一个连接。

    jdbc.url=jdbc:mysql://localhost:3306/stulevelsystem? 中3306是你上一步设置的MySQL端口,stulevelsystem是上一步新建连接的端口。

    jdbc.username=root 是上一步用户名

    jdbc.password=123456 是上一步密码

    jdbc.url=jdbc:mysql://localhost:3306/stulevelsystem?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&useSSL=false
       
    jdbc.username=root
       
    jdbc.password=123456
       
    druid.initialSize=10
    druid.maxActive=30
    druid.minIdle=3
    druid.maxIdle=1
    druid.maxWait=60000
    druid.removeAbandoned=true
    druid.removeAbandonedTimeout=18000
    druid.timeBetweenEvictionRunsMillis=60000
    druid.minEvictableIdleTimeMillis=300000
    druid.validationQuery =SELECT 1 FROM DUAL
    druid.testWhileIdle=true 
    druid.testOnBorrow=false
    druid.testOnReturn=false
    druid.poolPreparedStatements=true
    druid.maxPoolPreparedStatementPerConnectionSize=50
    druid.filters=stat
    jdbc.driver=com.mysql.jdbc.Driver
    
  4. 将db.properties加入spring.xml

    <!-- 引入db.properties -->
         <context:property-placeholder location="classpath:com/conf/db.properties" ignore-unresolvable="true" />
    

搭建MyBatis

  1. 首先在spring.xml引入mybatis设置

    property name=”dataSource” ref=”dataSource” 中ref要指定为 bean id=”dataSource” class=”com.alibaba.druid.pool.DruidDataSource” destroy-method=”close”里的id

<!-- mybatis配置开始 -->
    	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		 <property name="mapperLocations">
            <array>
                <value>classpath:mapper/*.xml</value>
            </array>
        </property>
	</bean>
		
  1. 配置Mapper扫描器

    路径自选,按照上一讲的框架是不用动的

    <!-- 配置Mapper扫描器 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!-- 扫描包路径,如果需要扫描多个包中间用半角逗号隔开 -->
    <property name="basePackage" value="com.system.mapper"/>
    <!-- 这边不能使用ref="sqlSessionFactory"原因是因为上面加载配置文件导致这边引用会报错 -->
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>
    

==接下来的都请结合实际,此文接下来都是以增删查改课程举例==

编写数据实体类

  1. 在com.system.entity.pojo下新建实例类

此处有快速添加set,get的好方法

鼠标在代码窗口,鼠标右键,source->Generate Getter and Setters…

全选然后OK

package com.system.entity.pojo;
import java.io.Serializable;
/**
 * 课程bean
 */
public class Course implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String id;//主键
	private String name;//名称
	private String teacher;//老师
	private String period;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getTeacher() {
		return teacher;
	}
	public void setTeacher(String teacher) {
		this.teacher = teacher;
	}
	public String getPeriod() {
		return period;
	}
	public void setPeriod(String period) {
		this.period = period;
	}
}

编写Mapper层

  1. 在system中新建mapper包CourseMapper.java
package com.system.mapper;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
import com.system.entity.pojo.Course;
/**
 * 课程Mapper
 *
 */
public interface CourseMapper {
	public List<Course> findCourseList();
	
	public List<Course> query(Map<String,Object> inputParam);
	
	public int insertCourse(Course course);
	
	public int deleteCourse(@Param("id")String id);
	
	public int updateCourse(Course course);
	
	public Course queryCourseById(String id);
}

在system中新建mapper包CourseMapper.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.system.mapper.CourseMapper">

	<select id="findCourseList" 
		resultType="com.system.entity.pojo.Course">
		select * from course 
	</select>
	
	<select id="query" parameterType="java.util.Map" resultType="com.system.entity.pojo.Course">
		select * from course u
		<where>
			<if test="name!=null and name!=''">
			   and u.name= #{name}
			</if>
			<if test="pwd!=null and pwd!=''">
			   and u.teacher= #{teacher}
			</if>
		</where>
	</select>
	
	
	<select id="queryCourseById" parameterType="java.lang.String" resultType="com.system.entity.pojo.Course">
		select * from course where id=#{value}
	</select>
	
	<insert id="insertCourse" useGeneratedKeys="true" keyProperty="id" parameterType="com.system.entity.pojo.Course">
		insert into course
		(id,name,teacher,period)
		values
		(#{id},#{name},#{teacher},#{period});
	</insert>
	
	<update id="updateCourse" parameterType="com.system.entity.pojo.Course" >
		update course set
		id=#{id},name=#{name},teacher=#{teacher},period=#{period}
		where
		id=#{id}	
	</update>
	
	<delete id="deleteCourse" parameterType="java.lang.String">
	    delete from  course where id=#{id}
	</delete>
</mapper>

代码解析

<select id="findCourseList" 
resultType="com.system.entity.pojo.Course">
<select id="query" parameterType="java.util.Map" resultType="com.system.entity.pojo.Course">
    ......

com.system.entity.pojo.Course在Course实体类没别名的时候要申明

如果要别名:

com.mybatis.sqlMapConfig中设置类全别名

<?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>
	<!-- 全局setting配置,根据需要添加 -->
	<!-- 配置别名 -->
	<typeAliases>
		<!-- 批量扫描设置别名 -->
		<package name="com.entity.pojo"/>
	</typeAliases>
</configuration>

编写Server层

  1. 新建com.system.service.CourseService.java,编写业务逻辑接口

    package com.system.service;
       
    import java.util.List;
       
    import com.system.entity.pojo.Course;
       
    public interface CourseService {
       
    	List<Course> getCourse(Course course);
       
    	int deleteCourse(Course course);
       
    	int updateCourse(Course course);
       
    	int addCourse(Course course);
       
    }
    
  2. 新建com.system.service.impl这个package来装实现类,下面新建CourseServiceImpl.java,编写业务逻辑实现

    package com.system.service.impl;
       
    import java.util.List;
    import java.util.UUID;
       
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
       
    import com.system.entity.pojo.Course;
    import com.system.mapper.CourseMapper;
    import com.system.service.CourseService;
       
    @Service
    public class CourseServiceImpl implements CourseService{
       	
    	@Autowired
    	private  CourseMapper courseMapper;
       	
    	@Override
    	public List<Course> getCourse(Course course) {
    		// TODO Auto-generated method stub
    		return courseMapper.findCourseList();
    	}
       
    	@Override
    	public int deleteCourse(Course course) {
    		// TODO Auto-generated method stub
    		return courseMapper.deleteCourse(course.getId());
    	}
       
    	@Override
    	public int updateCourse(Course course) {
    		// TODO Auto-generated method stub
    		return courseMapper.updateCourse(course);
    	}
       
    	@Override
    	public int addCourse(Course course) {
    		// TODO Auto-generated method stub
    		course.setId(UUID.randomUUID().toString());
    		return courseMapper.insertCourse(course);
    	}
    }
       
    

代码解析

@Autowired
private  CourseMapper courseMapper;

@Autowired这个注解是无需new直接spring内部生成

public class CourseServiceImpl implements CourseService{

申明是CourseService实现

course.setId(UUID.randomUUID().toString());

主键

编写Controller层

  1. 新建com.system.controller.CourseController.java,去拦截请求。

    package com.system.controller;
       
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.List;
       
    import javax.servlet.http.HttpServletResponse;
       
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
       
    import com.alibaba.fastjson.JSON;
    import com.system.entity.pojo.Course;
    import com.system.service.CourseService;
       
    @Controller
    @RequestMapping("visitor")
    public class CourseController {
    	@Autowired
    	private  CourseService courseService;
    	/**
    	 * 查询课程
    	 * @param response
    	 * @throws IOException
    	 */
    	@RequestMapping("/getCourse")
    	public void getCourse(Course course,HttpServletResponse response) throws IOException{
    		List<Course>  list=courseService.getCourse(course);
    		response.setCharacterEncoding("utf-8");
    		response.setContentType("text/html");
    		PrintWriter out=response.getWriter();
    		out.print(JSON.toJSONString(list));
    		out.close();
    	}
    	/**
    	 * 新增课程
    	 * @param response
    	 * @throws IOException
    	 */
    	@RequestMapping("/addCourse")
    	public void addCourse(Course course,HttpServletResponse response) throws IOException{
    		int  result=courseService.addCourse(course);
    		PrintWriter out=response.getWriter();
    		out.print(result);
    		out.close();
    	}
    	/**
    	 * 修改课程
    	 * @param response
    	 * @throws IOException
    	 */
    	@RequestMapping("/updateCourse")
    	public void updateCourse(Course course,HttpServletResponse response) throws IOException{
    		int  result=courseService.updateCourse(course);
    		PrintWriter out=response.getWriter();
    		out.print(result);
    		out.close();
    	}
    	/**
    	 * 删除课程
    	 * @param response
    	 * @throws IOException
    	 */
    	@RequestMapping("/deleteCourse")
    	public void deleteCourse(Course course,HttpServletResponse response) throws IOException{
    		int  result=courseService.deleteCourse(course);
    		PrintWriter out=response.getWriter();
    		out.print(result);
    		out.close();
    	}
    }
       
    

    代码解析

    response.setCharacterEncoding("utf-8");
    response.setContentType("text/html");
    

    转成utf-8,不然乱码

总结

本示例是从下往上编写的

  • 新建数据库,使用分布式主键
  • 按照新建数据库,到管理数据库的mybatis配置
  • mapper中用上了xml对数据库直接处理,然后用Mapper调用
  • 之后server服务层,实现层和接口层
  • controller层拦截请求,和server接口层交互
本站总访问量

BUFF © 2018. All rights reserved.

Powered by Hydejack v8.1.1