ssm----spring整合mybatis

第一步:

创建一个maven项目,采用webapp模板进行创建

导入依赖

 <dependencies>
    <!--spring相关依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.1.9.RELEASE</version>
    </dependency>

    <!--servlet规范-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
    </dependency>

    <!--mysql相关-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
    </dependency>

    <!--jdbc相关-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.1.9.RELEASE</version>
    </dependency>

    <!--mybatis相关-->
      <!--与spring整合-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>2.0.6</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.3</version>
    </dependency>

    <!--连接池-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.2.6</version>
    </dependency>

    <!--测试依赖-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.1.9.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.1.9.RELEASE</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <encoding>utf-8</encoding>
        </configuration>
      </plugin>
    </plugins>
  </build>

第二步:

创建spring配置文件

<?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-4.2.xsd">
    <!--spring 注解扫描-->
    <context:component-scan base-package="com.zc"/>


</beans>

这时我们想整合mybatis,发现我们还没有创建mybatis的配置文件,也没有写相关的代码

我们先完成代码的编写,创建包 com.zc.dao,然后创建UserDao编写相关方法

实体类编写

public class User implements Serializable {
    private String userName;
    private Integer id;
    private String phone;
    private String gender;
    private String password;

    public User(String userName, Integer id, String phone, String gender, String password) {
        this.userName = userName;
        this.id = id;
        this.phone = phone;
        this.gender = gender;
        this.password = password;
    }
    public User(String userName,  String phone, String gender, String password) {
        this.userName = userName;
        this.phone = phone;
        this.gender = gender;
        this.password = password;
    }

    public User() {
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "userName='" + userName + '\'' +
                ", id=" + id +
                ", phone='" + phone + '\'' +
                ", gender='" + gender + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
public interface UserDao {
    List<User> selectAll();

    User selectById(Integer id);

    void addUser(User user);

    void deleteById(Integer id);

    void updateUser(User user);
}

然后需要创建com.zc.service包,创建userService然后编写同样的方法.在service包下创建impl包,编写实现类实现userService

@Service
public class UserServiceImpl implements Userservice {

    @Autowired
    private UserDao userDao;

    public List<User> selectAll() {
        return userDao.selectAll();
    }

    public User selectById(Integer id) {
        return userDao.selectById(id);
    }

    public void addUser(User user) {
        userDao.addUser(user);
    }

    public void deleteById(Integer id) {
        userDao.deleteById(id);
    }

    public void updateUser(User user) {
         userDao.updateUser(user);
    }
}

编辑userDao.xml,层结构需要和userDao保持一致,方法根据需要编写就行

<?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.zc.dao.UserDao">
    <select id="selectAll" resultType="com.zc.domain.User">
        select * from user
    </select>

    <select id="selectById" resultType="com.zc.domain.User" parameterType="Integer">
        select * from user where id = #{id}
    </select>

    <insert id="addUser" parameterType="user">
        insert into user (username , password , gender , phone) value (
        #{userName},#{password},#{gender},#{phone}
        )
    </insert>

    <delete id="deleteById" parameterType="Integer">
        delete user where id = #{id}
    </delete>

    <update id="updateUser" parameterType="com.zc.domain.User">
        update user set
        <if test="userName != null and userName != ''">
            username = #{userName},
        </if>
        <if test="password != null and password != ''">
            password = #{password},
        </if>
        <if test="gender != null and gender != ''">
            gender = #{gender},
        </if>
        <if test="phone != null and phone != ''">
            phone = #{phone}
        </if>
        where id = #{id}
    </update>

</mapper>

这个时候我们就需要开始在配置文件中整合mybatis了

<?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-4.2.xsd">
    <!--spring 注解扫描-->
    <context:component-scan base-package="com.zc"/>

    <!--spring 整合mybatis-->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref=""/>
        <property name="typeAliasesPackage" value=""/>
    </bean>


</beans>

这时我们发现,我们还没有dataSource对象,需要什么,我们就提供什么。首先创建jdbc.porpertis文件,这样方便我们以后修改数据库信息

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/db2?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root

然后在配置文件中,定义dataSource bean,开启事物注解扫描等

<!--spring 注解扫描-->
    <context:component-scan base-package="com.zc"/>

    <!--扫描jdbc.properties-->
    <context:property-placeholder location="classpath*:jdbc.properties"/>

    <tx:annotation-driven transaction-manager="txMannager"/>

    <!--数据源-->
    <bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!--spring 整合mybatis-->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="typeAliasesPackage" value="com.zc.domain"/>
    </bean>

    <!--开启mapper映射扫描-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.zc.dao"/>
    </bean>

    <bean id="txMannager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

我们在userService上开启事物注解扫描

@Transactional(readOnly = true)
public interface Userservice {
    List<User> selectAll();


    User selectById(Integer id);

    @Transactional(readOnly = false)
    void addUser(User user);

    @Transactional(readOnly = false)
    void deleteById(Integer id);

    @Transactional(readOnly = false)
    void updateUser(User user);
}

第三步

一切准备就绪我们就可以开始测试了

@RunWith(SpringJUnit4ClassRunner.class)//指定测试环境
@ContextConfiguration(locations = "classpath:applicationContext.xml")//指定配置文件
public class UserServiceTest {

    @Autowired
    private Userservice userservice;

    @Test
    public void testAdd(){
        User user = new User("王五", "13986071730", "男", "12345");
        userservice.addUser(user);
    }

    @Test
    public void select(){
        List<User> users = userservice.selectAll();
        for (User user : users) {
            System.out.println(user);
        }
    }

    @Test
    public void update(){
        User user = new User("王五", 3,"11111111111", "男", "12345");
        userservice.updateUser(user);
    }

    @Test
    public void selectById(){
        System.out.println(userservice.selectById(1));
    }
}

写的比较粗糙,如果有需要可以参考一下~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值