文章目录
- 一、创建所需文件夹target、java、resource等如图(一)所示
- 二、代码
- 2.1pojo.Paper:
- 2.2dao.PaperDao:
- 2.3service.PaperService(与dao层唯一不同的点是注解不同这里是@service,dao层是@component):
- 2.4service.impl.PaperServiceImpl:
- 2.5db.properties(实现jdbc的一层封装,性能优化写在Mybatis中包括连接池的数量,缓存的数量,最大连接数量,最小连接数量,超时等待等等)
- 2.6log4j.properties(日志文件为了避免Mybatis报错)
- 2.7spring-dao.xml(文件头部在其他项目中都是一样发的):
- 2.8spring-service.xml(取service):
- 2.9mybatis-config.xml(固定写法,控制mybatis产生作用。识别mapper文件并取到sqlSesstionFactory)
- 3.0PaperMapper.xml(映射文件,操作交给mybatis即dao层,一个dao对应一个map文件,相当于impl,区别只写sql语句)
一、创建所需文件夹target、java、resource等如图(一)所示
图(一)
二、代码
2.1pojo.Paper:
package com.ssm.pojo;
public class Paper {
private int paperId;
private String paperName;
private int paperNum;
private String paperDetail;
public int getPaperId() {
return paperId;
}
public void setPaperId(int paperId) {
this.paperId = paperId;
}
public String getPaperName() {
return paperName;
}
public void setPaperName(String paperName) {
this.paperName = paperName;
}
public int getPaperNum() {
return paperNum;
}
public void setPaperNum(int paperNum) {
this.paperNum = paperNum;
}
public String getPaperDetail() {
return paperDetail;
}
public void setPaperDetail(String paperDetail) {
this.paperDetail = paperDetail;
}
public Paper() {
}
public Paper(int paperId, String paperName, int paperNum, String paperDetail) {
this.paperId = paperId;
this.paperName = paperName;
this.paperNum = paperNum;
this.paperDetail = paperDetail;
}
public Paper(String paperName, int paperNum, String paperDetail) {
this.paperName = paperName;
this.paperNum = paperNum;
this.paperDetail = paperDetail;
}
@Override
public String toString() {
return "Paper{" +
"paperId=" + paperId +
", paperName='" + paperName + '\'' +
", paperNum=" + paperNum +
", paperDetail='" + paperDetail + '\'' +
'}';
}
}
2.2dao.PaperDao:
package com.ssm.dao;
import com.ssm.pojo.Paper;
import org.springframework.stereotype.Component;
import java.util.List;
@Component//spring框架注入jdbc
public interface PaperDao {
// 1. 新增论文的持久层
int insertPaper(Paper paper);
// 2. 删除论文的持久层(根据paperid来删除)
int deletePaper(int paperId);
// 3. 修改论文的持久层(先把原来的数据paper进行加载,才可以修改,修改完之后保存 )
int updatePaper(Paper paper);
// 4. 通过固定条件查询(单查,这里是根据paperid查询,返回的是paper)
Paper findPaperById(int paperId);
// 5. 全查(返回的是List集合)
List<Paper> findPapersByAll();
// 6. 模糊查询(返回的也是List类型的集合体)
List<Paper> findPapersByLike(String paperName);
}
2.3service.PaperService(与dao层唯一不同的点是注解不同这里是@service,dao层是@component):
package com.ssm.service;
import com.ssm.pojo.Paper;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public interface PaperService {
// 1. 新增论文的持久层
int insertPaper(Paper paper);
// 2. 删除论文的持久层
int deletePaper(int paperId);
// 3. 修改论文的持久层
int updatePaper(Paper paper);
// 4. 通过固定条件查询
Paper findPaperById(int paperId);
// 5. 全查
List<Paper> findPapersByAll();
// 6. 模糊查询
List<Paper> findPapersByLike(String paperName);
}
2.4service.impl.PaperServiceImpl:
package com.ssm.service.impl;
import com.ssm.dao.PaperDao;
import com.ssm.pojo.Paper;
import com.ssm.service.PaperService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class PaperServiceImpl implements PaperService {
@Autowired//面向切面Aspect Oriented Programming(AOP),,注入dao层
private PaperDao paperDao;
public void setPaperDao(PaperDao paperDao) {
this.paperDao = paperDao;
}
@Override
public int insertPaper(Paper paper) {
return 0;
}
@Override
public int deletePaper(int paperId) {
return 0;
}
@Override
public int updatePaper(Paper paper) {
return 0;
}
@Override
public Paper findPaperById(int paperId) {
return null;
}
@Override
public List<Paper> findPapersByAll() {
return null;
}
@Override
public List<Paper> findPapersByLike(String paperName) {
return null;
}
}
2.5db.properties(实现jdbc的一层封装,性能优化写在Mybatis中包括连接池的数量,缓存的数量,最大连接数量,最小连接数量,超时等待等等)
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/db_java1ssm?useSSL=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456
2.6log4j.properties(日志文件为了避免Mybatis报错)
log4j.rootLogger=ERROR,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
2.7spring-dao.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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 1.获取db.properties文件获取参数 -->
<context:property-placeholder location="classpath:db.properties" />
<!-- 2.获取dataSource数据源对象 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">//毁灭方法,自动关闭连接池
<!-- 2.1配置连接池参数 -->
<property name="driverClass" value="${jdbc.driver}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<!-- 2.2优化连接池参数 -->
<property name="maxPoolSize" value="30" />//最大连接数量30
<property name="minPoolSize" value="10" />//最小连接数量10
<!-- 关闭数据库连接后不自动提交 (手动提交作业)-->
<property name="autoCommitOnClose" value="false" />
<property name="checkoutTimeout" value="10000" />//超时等待,10之后跳出类似此网页不存在
<property name="acquireRetryAttempts" value="3" />//没有响应之后,可在连接3次
</bean>
<!-- 3.整合Mybatis : 为了获取sqlSessionFactory对象(会话工厂) (spring是扫描器获取impl)-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 3.1注入数据库连接池 -->
<property name="dataSource" ref="dataSource" />
<!-- 3.2获取mybatis配置文件:mybatis-config.xml -->
<property name="configLocation" value="classpath:mybatis-config.xml" />
<!-- 3.3扫描包,使用别名 返回的是pojo对象-->
<property name="typeAliasesPackage" value="com.ssm.pojo" />
<!-- 3.4获取mapper文件 -->
<property name="mapperLocations" value="classpath:mapper/*.xml" />
</bean>
<!-- 4.获取paperDao对象 : dao要与数据库打交道, -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
//流程:mybatis融到dao层里面,把dao层扫描出来放到service里面操作
<property name="basePackage" value="com.ssm.dao" />
</bean>
</beans>
2.8spring-service.xml(取service):
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 1.扫描service包下的所有注解,让注解产生功能 -->
<context:component-scan base-package="com.ssm.service" />
<!-- 2.生成一个事务管理器对象产生事务管理transactionManager -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />//此处要添加依赖
</bean>
<!-- 3.事务管理操作 -->
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- 4.生成service对象 -->
<bean id="paperService" class="com.ssm.service.impl.PaperServiceImpl" />
</beans>
2.9mybatis-config.xml(固定写法,控制mybatis产生作用。识别mapper文件并取到sqlSesstionFactory)
<?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>
<!-- 1.表字段自动增长列:自动增长 -->
<setting name="useGeneratedKeys" value="true"/>
<!-- 2.使用别名替换列名: 默认为true -->
<setting name="useColumnLabel" value="true" />
<!-- 3.命名规则定义为小驼峰法则 -->
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
</configuration>
3.0PaperMapper.xml(映射文件,操作交给mybatis即dao层,一个dao对应一个map文件,相当于impl,区别只写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.ssm.dao.PaperDao">
<!-- 1.实现新增 -->
<insert id="insertPaper" parameterType="Paper">
insert into tb_paper(papername,papernum,paperdetail) values(#{paperName},#{paperNum},#{paperDetail})
</insert>
<!-- 2.实现删除 -->
<delete id="deletePaper" parameterType="int">
delete from tb_paper where paperid=#{paperId}
</delete>
<!-- 3.实现修改 -->
<update id="updatePaper" parameterType="Paper">
update tb_paper set papername=#{paperName},papernum=#{paperNum},paperdetail=#{paperDetail} where paperid=#{paperId}
</update>
<!-- 4.实现单查 -->
<select id="findPaperById" parameterType="int" resultType="Paper">
select papername as paperName,papernum as paperNum,paperdetail as paperDetail from tb_paper where paperid=#{paperId}
</select>
<!-- 5.实现全查 -->
<select id="findPapersByAll" resultMap="paperResultMap">
select * from tb_paper
</select>
<!-- 6.模糊查询 -->
<select id="findPapersByLike" parameterType="String" resultMap="paperResultMap">
select * from tb_paper where papername like '%${value}%'
</select>
<!-- 告诉mybatis返回数据应该是这样的 -->
<resultMap id="paperResultMap" type="Paper">
<id property="paperId" column="paperid" />
<result property="paperName" column="papername" />
<result property="paperNum" column="papernum" />
<result property="paperDetail" column="paperdetail" />
</resultMap>
</mapper>