1. 程式人生 > >springmvc配置myBatis,並實現增刪改查、分頁功能

springmvc配置myBatis,並實現增刪改查、分頁功能

springmvc配置myBatis

     myBatis是一個數據庫訪問的外掛,通過jdbc實現。

     實現思路:

     1.maven引入myBatis

 <!-- mybatis核心包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <!-- mybatis/spring包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.2</version>
        </dependency>

     2.springmvc整合myBatis

    applicationContext.xml:

	<!-- 資料庫連線配置 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
		<property name="driverClass" value="com.mysql.jdbc.Driver" />

		<property name="jdbcUrl" value="${jdbc.url}" />
		<property name="user" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}"/>

		<!-- 設定資料庫連線池的最大連線數 -->
		<property name="maxPoolSize" value="20">
		</property>
		<!-- 設定資料庫連線池的最小連線數 -->
		<property name="minPoolSize" value="2">
		</property>
		<!-- 設定資料庫連線池的初始化連線數 -->
		<property name="initialPoolSize" value="2">
		</property>
		<!-- 設定資料庫連線池的連線的最大空閒時間,單位為秒 -->
		<property name="maxIdleTime" value="20">
		</property>

	</bean>

	<!-- 資料庫事務配置 -->
	<bean id="transactionManager"
		  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
	</bean>

	<!-- mybatis資料庫跑著在 -->
	<!-- spring和MyBatis完美整合,不需要mybatis的配置對映檔案 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="configLocation">
			<value>classpath:mysql/mybatis-config.xml</value>
		</property>
		<property name="mapperLocations">
			<value>classpath*:Mapper/*.xml</value>
		</property>
		<property name="dataSource" ref="dataSource" />
	</bean>

	<!-- DAO介面所在包名,Spring會自動查詢其下的類 -->


	<bean id="mapperScannerConfig" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.relaxPalace.web.dao" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
	</bean>

   myBatis實現增刪改查,分頁功能:

     實現思路圖:


    1.mybatis設定檔案,設定註解方式,第三方外掛、定義資料類

   mybatis-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>
	<typeAliases>
        <typeAlias alias="Integer" type="java.lang.Integer" />
		<typeAlias alias="String" type="java.lang.String" />
		<typeAlias alias="Float" type="java.lang.Float" />
		<typeAlias alias="Double" type="java.lang.Double" />
		<typeAlias alias="Timestamp" type="java.sql.Timestamp" />
		<typeAlias alias="List" type="java.util.List" />
		<typeAlias alias="Map" type="java.util.Map"/>
		<typeAlias alias="HashMap" type="java.util.HashMap"/>

		<!-- 註解模式掃描實體類所在的包,在model裡面使用@Alias("User") -->
  		<package name="com.relaxPalace" />
    </typeAliases>

	<plugins>
		<!-- com.github.pagehelper為PageHelper類所在包名 -->
		<plugin interceptor="com.github.pagehelper.PageHelper">
			<property name="dialect" value="mysql"/>
			<!-- 該引數預設為false -->
			<!-- 設定為true時,會將RowBounds第一個引數offset當成pageNum頁碼使用 -->
			<!-- 和startPage中的pageNum效果一樣-->
			<property name="offsetAsPageNum" value="true"/>
			<!-- 該引數預設為false -->
			<!-- 設定為true時,使用RowBounds分頁會進行count查詢 -->
			<property name="rowBoundsWithCount" value="true"/>
			<!-- 設定為true時,如果pageSize=0或者RowBounds.limit = 0就會查詢出全部的結果 -->
			<!-- (相當於沒有執行分頁查詢,但是返回結果仍然是Page型別)-->
			<property name="pageSizeZero" value="true"/>
			<!-- 3.3.0版本可用 - 分頁引數合理化,預設false禁用 -->
			<!-- 啟用合理化時,如果pageNum<1會查詢第一頁,如果pageNum>pages會查詢最後一頁 -->
			<!-- 禁用合理化時,如果pageNum<1或pageNum>pages會返回空資料 -->
			<property name="reasonable" value="false"/>
			<!-- 3.5.0版本可用 - 為了支援startPage(Object params)方法 -->
			<!-- 增加了一個`params`引數來配置引數對映,用於從Map或ServletRequest中取值 -->
			<!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置對映的用預設值 -->
			<!-- 不理解該含義的前提下,不要隨便複製該配置 -->
			<property name="params" value="pageNum=start;pageSize=limit;"/>
			<!-- always總是返回PageInfo型別,check檢查返回型別是否為PageInfo,none返回Page -->
			<property name="returnPageInfo" value="check"/>
		</plugin>
	</plugins>

</configuration>

   2. 定義myBatis的sql執行檔案

    userMapper.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">

<!--Auto Create,Don't Modify,you should copy some sql config,because only have insert,update,full query and delete by primaryKey
	@Author JiangZhiYong	@date 2015年4月21日 11:28:58-->
	
<mapper namespace="com.relaxPalace.web.dao.userDao">

	<resultMap id="usersResultMap" type="user" >
		<result column="id" property="id"/>
		<result column="name" property="name"/>
		<result column="password" property="password"/>
		<result column="describe" property="describe"/>
		<result column="updateTime" property="updateTime"/>
	</resultMap>

	<!-- 獲取所有使用者資訊-->
	<select id="getAllusers"  resultType="list"  resultMap="usersResultMap" >
		SELECT * FROM rp_user
	</select>

	<!-- 獲取單個使用者資訊-->
	<select id="getUserById"  resultType="UsEr">
		SELECT * FROM rp_user where id=#{userId}
	</select>

	<!-- 新增使用者資訊-->
	<insert id="AddUser"  parameterType="user" >
	insert into rp_user(name,password,describee,updateTime) values(#{name},#{password},#{describee},#{updateTime});
    </insert>

	<!--  刪除使用者資訊  -->
	<update id="deleteUser" parameterType="String" >
		delete from rp_user where id=#{userId}
	</update>

	<!-- 修改使用者資訊  -->
	<update id="updateUser" parameterType="user" >
		update rp_user set name=#{name},password=#{password},
		describee=#{describee}  where id=#{id}
	</update>

</mapper>

    3.對應資料庫表字段的model

    User.java:  

package com.relaxPalace.web.model;

import org.apache.ibatis.type.Alias;

import java.sql.Date;

/**
 * Created by Administrator on 2017/6/22.
 */
@Alias("user")
public class User {
    private Integer id;
    private String name;
    private String password;
    private String describee;
    private Date updateTime;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

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

    public String getDescribee() {
        return describee;
    }

    public void setDescribee(String describee) {
        this.describee = describee;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }


    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", describee='" + describee + '\'' +
                ", updateTime=" + updateTime +
                '}';
    }
}

   4.dao操作的介面

     userDao.java:

public interface userDao {

    //獲取所有的使用者
    public List<User> getAllusers();

    //獲取單個使用者的資訊
    public User getUserById(String userId);

    //新增刪除
    public void AddUser(User user);

    //刪除使用者
    public void deleteUser(String userId);

    //修改使用者
    public void updateUser(User user);
}


  5.Service層介面

   userService.java:

package com.relaxPalace.web.service;

import com.relaxPalace.web.model.User;

import java.util.List;

/**
 * Created by Administrator on 2017/6/22.
 */
public interface userService {

    public List<User> getAllusers();

    public User getUserById(String userId);

    public void AddUser(User user);

    public void deleteUser(String userId);

    public void updateUser(User user);

}

   userServiceImpl.java:

package com.relaxPalace.web.service.impl;

import com.relaxPalace.web.dao.userDao;
import com.relaxPalace.web.model.User;
import com.relaxPalace.web.service.userService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * Created by Administrator on 2017/6/22.
 */
@Service("userService")
public class userServiceImpl implements userService {

    @Resource
    private userDao userDao;

    @Override
    public List<User> getAllusers() {
        return userDao.getAllusers();
    }

    @Override
    public User getUserById(String userId) {
        return userDao.getUserById(userId);
    }

    @Override
    public void AddUser(User user) {
        userDao.AddUser(user);
    }

    @Override
    public void deleteUser(String userId) {
        userDao.deleteUser(userId);
    }

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

   6.controller層呼叫

    userController.java:

@RequestMapping("getAllusers")
    @ResponseBody
    public AjaxJson getAllusers(HttpServletRequest req) {
        AjaxJson j = new AjaxJson();

        HashMap<String,Object> map = new HashMap<String,Object>();
        List<User> userList=userService.getAllusers();
        System.out.println(userList);
        map.put("userList:",userList);

        j.setMsg("Ok");
        j.setAttributes(map);

        return j;

    }