spring整合myabtis小案例

学完了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">-->
<!--        &lt;!&ndash;利用构造器注入&ndash;&gt;-->
<!--        <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 &lt;= 500 &amp;&amp; id &gt;=1
        </if>
        <if test="#{flag}!=null and flag==2">
            and id &lt;= 1000 &amp;&amp; id &gt;=501
        </if>
        <if test="#{flag}!=null and flag==3">
            and id &lt;=1500 &amp;&amp; id &gt;=1001
        </if>
        <if test="#{flag}!=null and flag==4">
            and id &lt;= 2000 &amp;&amp; id &gt;=1501
        </if>
        <if test="#{flag}!=null and flag==5">
            and id &lt;= 2500 &amp;&amp; id &gt;=2001
        </if>
        <if test="#{flag}!=null and flag==6">
            and id &lt;=3000 &amp;&amp; id &gt;=2501
        </if>
        <if test="#{flag}!=null and flag==7">
            and id &lt;= 3500 &amp;&amp; id &gt;=3001
        </if>
        <if test="#{flag}!=null and flag==8">
            and id &lt;= 4000 &amp;&amp; id &gt;=3501
        </if>
        <if test="#{flag}!=null and flag==9">
            and id &lt;=4500 &amp;&amp; id &gt;=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));
    }

测试成功!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值