学完了spring-myabtis搞个小案例试试,嘿嘿
前置知识
mysql,jdbc,mybatis.spring
项目
目录结构
依赖
<dependencies>
<!-- 测试用-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- mybatis包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!-- mysql包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- spring包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.0.RELEASE</version>
</dependency>
<!-- spring-jdbc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.11</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.11</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
资源过滤,写在pom
<build>
<resources>
<resource>
<directory>src/main/Java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.* </include>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
日志
这个写不写都行,根据需要,在mybatis的settings属性确定。放在resources中,
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<property name="log_level" value="info" />
<Property name="log_dir" value="log" />
<property name="log_pattern"
value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] - [%t] %logger - %m%n" />
<property name="file_name" value="test" />
<property name="every_file_size" value="100 MB" />
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${log_pattern}" />
</Console>
<RollingFile name="RollingFile"
filename="${log_dir}/${file_name}.log"
filepattern="${log_dir}/$${date:yyyy-MM}/${file_name}-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="DEBUG" onMatch="ACCEPT"
onMismatch="DENY" />
<PatternLayout pattern="${log_pattern}" />
<Policies>
<SizeBasedTriggeringPolicy
size="${every_file_size}" />
<TimeBasedTriggeringPolicy modulate="true"
interval="1" />
</Policies>
<DefaultRolloverStrategy max="20" />
</RollingFile>
<RollingFile name="RollingFileErr"
fileName="${log_dir}/${file_name}-warnerr.log"
filePattern="${log_dir}/$${date:yyyy-MM}/${file_name}-%d{yyyy-MM-dd}-warnerr-%i.log">
<ThresholdFilter level="WARN" onMatch="ACCEPT"
onMismatch="DENY" />
<PatternLayout pattern="${log_pattern}" />
<Policies>
<SizeBasedTriggeringPolicy
size="${every_file_size}" />
<TimeBasedTriggeringPolicy modulate="true"
interval="1" />
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="${log_level}">
<AppenderRef ref="Console" />
<AppenderRef ref="RollingFile" />
<appender-ref ref="RollingFileErr" />
</Root>
</Loggers>
</Configuration>
数据库表单
words表
user表
首先是数据库对应的User类,Words类
User类
package com.Moon.pojo;
import java.util.Objects;
/**
* @author MoonLeaves
* @purpose
* @create 2020-10-27 15:27
*/
public class User {
private String name;
private int score;
private int id;
private String password;
public User(String name, String password,int id,int score ){
this.name = name;
this.score = score;
this.id = id;
this.password = password;
}
public User(String name, String password ,int id) {
this.name = name;
this.id = id;
this.password = password;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", score=" + score +
", id=" + id +
", password='" + password + '\'' +
'}';
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User() {
}
public String getName() {
return name;
}
public User(String name, int id) {
this.name = name;
this.id = id;
// 创建一个用户时,基础分数都为0
this.score=0;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return score == user.score &&
id == user.id &&
Objects.equals(name, user.name);
}
@Override
public int hashCode() {
return 0;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
Words类
package com.Moon.pojo;
/**
* @author MoonLeaves
* @purpose
* @create 2020-10-27 15:37
*/
public class Words {
private String Word;
private String ChineseMeaning;
private int id;
private int group;
public Words(String word, String chineseMeaning, int id, int group) {
Word = word;
ChineseMeaning = chineseMeaning;
this.id = id;
this.group = group;
}
public Words(String word, String chineseMeaning, int id) {
Word = word;
ChineseMeaning = chineseMeaning;
this.id = id;
this.group=0;
}
public String getWord() {
return Word;
}
public void setWord(String word) {
Word = word;
}
public String getChineseMeaning() {
return ChineseMeaning;
}
public void setChineseMeaning(String chineseMeaning) {
ChineseMeaning = chineseMeaning;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getGroup() {
return group;
}
public void setGroup(int group) {
this.group = group;
}
@Override
public String toString() {
return "Words{" +
"Word='" + Word + '\'' +
", ChineseMeaning='" + ChineseMeaning + '\'' +
", id=" + id +
", group=" + group +
'}';
}
public Words() {
}
}
myabtis-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="logImpl" value="STDOUT_LOGGING"/>
<!-- 驼峰命名法-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<package name="com.Moon.pojo"/>
</typeAliases>
<mappers>
<!-- 三种方式之一-->
<package name="com.Moon.mapper"/>
</mappers>
</configuration>
这里面需要注意的是< mappers >标签,他要和mapper类的位置对应
在正常的myabtis中,这里需要加上数据源(password什么的),但是在spring-myabtis整合中,spring接管了这个操作。(根据文档,其实这个spring-dao.xml可以完全替代mybatis,但是狂神说了,要给myabtis一个面子)
spring-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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/myproject?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="djq3256677425"/>
</bean>
<!--配置SqlSessionFactory,关联MyBatis-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--关联Mybatis-->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<!--注册sqlSessionTemplate , 关联sqlSessionFactory-->
<!-- <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">-->
<!-- <!–利用构造器注入–>-->
<!-- <constructor-arg index="0" ref="sqlSessionFactory"/>-->
<!-- </bean>-->
<bean id="wordsMapperImpl" class="com.Moon.mapper.impl.WordsMapperImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
<bean id="userMapperImpl" class="com.Moon.mapper.impl.UserMapperImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
</beans>
按照书写来说,原来是这个样纸,在sqlSessionFactory的configLocat属性去绑定mybatis,与上面的代码比较,只是少了bean的注册
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/myproject?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="djq3256677425"/>
</bean>
<!--配置SqlSessionFactory,关联MyBatis-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--关联Mybatis-->
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
</beans>
UserMapper
package com.Moon.mapper;
import com.Moon.pojo.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.sql.SQLException;
import java.util.List;
/**
* @author MoonLeaves
* @purpose
* @create 2020-10-27 19:50
*/
public interface UserMapper {
// 自动添加的score
@Insert("insert into user (name,password,id,score) values (#{name},'123456',#{id},0);")
int addUserAutoScore(User user) throws SQLException;
// 设置score
@Insert("insert into user (name,password,id,score) values(#{name},#{password},#{id},#{score})")
int addUserSetScoreAndPassword(User user) throws SQLException;
// 删除用户
@Delete("delete from user where id = #{id}")
int deleteUserById(@Param("id") int id);
//根据id查找用户
@Select("select * from user where id=#{id}")
User selectUserById(@Param("id") int id);
/**
* 这个是写在sql里的
* 返回所有的用户
* @return User的List集合
*/
List<User> getAllUser();
}
UserMapper.xml
其实不写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.Moon.mapper.UserMapper">
<select id="getAllUser" resultType="com.Moon.pojo.User">
select * from user ;
</select>
</mapper>
WordsMapper
package com.Moon.mapper;
import com.Moon.pojo.Words;
import java.util.List;
/**
* @author MoonLeaves
* @purpose
* @create 2020-10-27 19:05
*/
public interface WordsMapper {
/**
* 获取所有对象
* @return Words的List集合
*/
List<Words> getAllWords();
/**
* 获取一个对象
* @param id
* @return Words
*/
Words getWordById(int id);
/**
* 这个是实际调用
* flag是传入的单词区间
* 返回一个words集合对象,也就是一个数据源
* @param flag
* @return Words的List集合
*/
List<Words> getWords(int flag);
/**
* 获取总的单词数目个数long
* @return long
*/
long getTotalNumberOfWords();
}
WordsMapper.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.Moon.mapper.WordsMapper">
<!-- 获取一个对象-->
<select id="getWordById" resultType="com.Moon.pojo.Words" parameterType="int">
select * from words where id=#{id};
</select>
<!-- 获取所有对象-->
<select id="getAllWords" resultType="com.Moon.pojo.Words">
select * from words ;
</select>
<!-- 实际调用-->
<select id="getWords" resultType="com.Moon.pojo.Words" parameterType="int">
select * from words where 1=1
<if test="#{flag}!=null and flag==1">
and id <= 500 && id >=1
</if>
<if test="#{flag}!=null and flag==2">
and id <= 1000 && id >=501
</if>
<if test="#{flag}!=null and flag==3">
and id <=1500 && id >=1001
</if>
<if test="#{flag}!=null and flag==4">
and id <= 2000 && id >=1501
</if>
<if test="#{flag}!=null and flag==5">
and id <= 2500 && id >=2001
</if>
<if test="#{flag}!=null and flag==6">
and id <=3000 && id >=2501
</if>
<if test="#{flag}!=null and flag==7">
and id <= 3500 && id >=3001
</if>
<if test="#{flag}!=null and flag==8">
and id <= 4000 && id >=3501
</if>
<if test="#{flag}!=null and flag==9">
and id <=4500 && id >=4001
</if>
</select>
<!-- 返回总单词数目-->
<select id="getTotalNumberOfWords" resultType="long">
select count(*) from words;
</select>
</mapper>
WordsMapperImpl
package com.Moon.mapper.impl;
import com.Moon.mapper.WordsMapper;
import com.Moon.pojo.Words;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import java.util.List;
/**
* @author MoonLeaves
* @purpose
* @creat 2020-12-01 22:46
*/
public class WordsMapperImpl extends SqlSessionDaoSupport implements WordsMapper {
/**
* 根据id获取一个对象
*
* @param id
* @return Words
*/
@Override
public Words getWordById(int id) {
return getSqlSession().getMapper(WordsMapper.class).getWordById(id);
}
/**
* 最大的那个,获取所有的对象
*
*/
@Override
public List<Words> getAllWords() {
return getSqlSession().getMapper(WordsMapper.class).getAllWords();
}
/**
* 这个是实际调用
* flag是传入的单词区间
* 返回一个words集合对象,也就是一个数据源
*
* @param flag
* @return Words的List集合
*/
@Override
public List<Words> getWords(int flag) {
return getSqlSession().getMapper(WordsMapper.class).getWords(flag);
}
/**
* 获取总的单词数目个数long
* @return long,返回单词的总数目
*/
@Override
public long getTotalNumberOfWords() {
return getSqlSession().getMapper(WordsMapper.class).getTotalNumberOfWords();
}
}
UserMapperImpl
package com.Moon.mapper.impl;
import com.Moon.mapper.UserMapper;
import com.Moon.pojo.User;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import java.sql.SQLException;
import java.util.List;
/**
* @author MoonLeaves
* @purpose
* @creat 2020-12-01 22:14
*/
public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper {
/**
* 只需要传入name,id就行,初始密码是123456,初始成绩是0
*/
@Override
public int addUserAutoScore(User user) throws SQLException {
return getSqlSession().getMapper(UserMapper.class).addUserAutoScore(user);
}
/**
* @param user
* @return 返回一个int值
* @throws SQLException
*/
@Override
public int addUserSetScoreAndPassword(User user) throws SQLException {
return getSqlSession().getMapper(UserMapper.class).addUserSetScoreAndPassword(user);
}
/**
* 根据id删除一个用户
*
* @param id
* @return 返回一个int值
*/
@Override
public int deleteUserById(int id) {
return getSqlSession().getMapper(UserMapper.class).deleteUserById(id);
}
/**
* 根据用户名查询一个用户
*
* @param id
* @return 返回一个User类
*/
@Override
public User selectUserById(int id) {
return getSqlSession().getMapper(UserMapper.class).selectUserById(id);
}
/**
* 返回所有的用户
*
* @return List<User>返回一个user集合
*/
@Override
public List<User> getAllUser() {
return getSqlSession().getMapper(UserMapper.class).getAllUser();
}
}
UserService
package com.Moon.service;
import com.Moon.pojo.User;
/**
* @author MoonLeaves
* @purpose
* @creat 2020-12-02 13:43
*/
public interface UserService {
/**
* 实现用户登录功能
* @param username (账户账号)
* @param password (账户密码)
* @return
*/
public User login(String username, String password);
}
UserServiceImpl
package com.Moon.service.impl;
import com.Moon.mapper.impl.UserMapperImpl;
import com.Moon.pojo.User;
import com.Moon.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
/**
* @author MoonLeaves
* @purpose
* @creat 2020-12-02 13:44
*/
public class UserServiceImpl implements UserService {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-dao.xml");
UserMapperImpl user = context.getBean(UserMapperImpl.class);
@Override
public User login(String username, String password) {
/**
* "仔细想一想,这个方法需要得到所有的user用户,然后进行筛选"
*/
//首先得到所有的用户
/**
* 这个sql写在了xml里
*/
List<User> allUser = user.getAllUser();
/**
* 然后根据这个user的集合遍历筛选
*/
for (User user : allUser) {
if (username.equals(user.getName())) {
//如果有这个人,在判断密码
if (password.equals(user.getPassword())) {
//如果密码也正确返回真
return user;
}
}
}
//注意这里
return new User();
}
}
好,到这里,代码基本上就完了
最后测试一下
@Test
public void testSpring_Mybatis() throws SQLException {
// ok!!!!!!!
ApplicationContext context = new ClassPathXmlApplicationContext("spring-dao.xml");
// System.out.println("1111");
// WordsMapperImpl wordsMapperImpl = context.getBean(WordsMapperImpl.class);
// System.out.println("11112222");
// Words wordById = wordsMapperImpl.getWordById(1);
// System.out.println(wordById);
UserMapperImpl userMapper = context.getBean(UserMapperImpl.class);
userMapper.addUserAutoScore(new User("xiaoming","1234",3));
}
测试成功!