Idea+Mybatis+Maven+單表增刪改查

步驟1:在mysql中創建表

create table `account` 
(
  `id` int(11) not null auto_increment,
  `username` varchar(32) not null,
  `pwd` varchar(64),
  `email` varchar(64),
  primary key (`id`),
  unique key `unique_username` (`username`),

  key `username_index` (`username`) USING BTree
) engine=InnoDB default charset=utf8

步驟2:在IDEA下創建Maven項目並創建與表對應的實體類

這裏寫圖片描述
往Maven項目添加Mybatis依賴的包,pom.xml如下所示

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cn.hurrican</groupId>
  <artifactId>conference</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>conference Maven Webapp</name>
  <url>http://maven.apache.org</url>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.9</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.42</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.ow2.asm/asm -->
    <dependency>
      <groupId>org.ow2.asm</groupId>
      <artifactId>asm</artifactId>
      <version>4.2</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/cglib/cglib -->
    <dependency>
      <groupId>cglib</groupId>
      <artifactId>cglib</artifactId>
      <version>3.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/log4j/log4j -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.7</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.7</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.21</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.21</version>
      <scope>test</scope>
    </dependency>


  </dependencies>
  <build>
    <finalName>conference</finalName>

    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>



項目mybatis.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>
        <!--當返回行的所有列都是空時,MyBatis默認返回null-->
        <setting name="jdbcTypeForNull" value="NULL"/>

        <!--cacheEnabled - 使全局的映射器啓用或禁用緩存-->
        <setting name="cacheEnabled" value="true"/>

    </settings>

    <typeAliases>
        <typeAlias type="beans.UserInfo" alias="UserInfo"></typeAlias>
        <package name="beans"></package>
    </typeAliases>

    <!-- 配置運行環境-->
    <environments default="mysql">
        <environment id="mysql">
            <!-- MyBatis 中有兩種事務管理器類型,分別是:-->
            <!--1. type = "JDBC" (依賴於數據源得到的連接來管理事務範圍)-->
            <!--2. type = "MANAGED" (不提交或回滾連接,讓容器來管理事務的整個週期)-->
            <transactionManager type="JDBC"/>

            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/conference"/>
                <property name="username" value="root"/>
                <property name="password" value="qwer123456"/>
                <!--poolMaximumActiveConnections – 正在使用連接的數量。默認值:10 -->
                <!--poolMaximumIdleConnections – 任意時間存在的空閒連接數-->
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="userinfoMapper.xml"/>
        <mapper resource="basicinfoMapper.xml"/>
        <mapper resource="workinfoMapper.xml"/>
    </mappers>

</configuration>



項目userinfoMapper.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="userdao">

    <insert id="addUser" parameterType="UserInfo" useGeneratedKeys="true" keyProperty="id">
        insert into account (username, pwd, email)
        values (#{username}, #{pwd}, #{email})
    </insert>

    <insert id="addUserAndQuery" useGeneratedKeys="true" keyProperty="id">
        insert into account (username, pwd, email)
        values (#{username}, #{pwd}, #{email})
        <selectKey resultType="int" keyProperty="id">
            select @@identity;
        </selectKey>
    </insert>


    <!-- 單表刪除語句-->
    <delete id="deleteUser" parameterType="long">
        delete from account where id = #{id}
    </delete>

    <!-- 單表更新語句-->
    <update id="updateUser">
        update account set username = #{username}, email = #{email} where id = #{id}
    </update>

    <!-- 單表查詢語句-->
    <select id="queryById" resultType="UserInfo" parameterType="long">
        select id, username, pwd, email from account where id = #{id}
    </select>

    <select id="queryAll" resultType="UserInfo">
        select id, username, pwd, email from account
    </select>

    <!-- 模糊查詢-->
    <select id="queryByLike" resultType="UserInfo">
        select id,username,email from account where email like concat('%', #{qq},'%')
    </select>

    <select id="queryNyLike1" resultType="UserInfo">
        select id,username,email from account where email like '%${value}%'
    </select>
</mapper>

這裏寫圖片描述
創建實體類beans.UserInfo.java

package beans;
public class UserInfo {
    private long id;
    private String username;
    private String email;
    private String pwd;

    public UserInfo(String username, String email, String pwd) {
        this.username = username;
        this.email = email;
        this.pwd = pwd;
    }

    public UserInfo()
    {
        this.id = -1;
    }

  //此處省略所有成員的getter方法和setter方法
    @Override
    public String toString() {
        return new StringBuffer().append("id:\t").append(this.id)
                .append("\nusername:\t").append(this.username).toString();
    }
}

創建DAO接口 dao.IUserinfoDao.java

package dao;
import beans.UserInfo;
import java.util.List;
public interface IUserinfoDao {
    void add(UserInfo user);
    void remove(UserInfo user);
    UserInfo queryById(long id);
    List<UserInfo> queryAll();
    void update(UserInfo user);
    List<UserInfo> queryByField(String fieldVal);
}

創建工具類MybatisSessionManage,主要用於獲取SqlSession對象

utils.MybatisSessionManage.java

package utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class MybatisSessionManage {
    private static InputStream stream = null;
    private static SqlSessionFactory factory = null;
    static {
        try {
            stream = Resources.getResourceAsStream("mybatis.xml");
            if (stream != null) {
                factory = new SqlSessionFactoryBuilder().build(stream);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public static SqlSession getSqlSession(){
        return factory.openSession();
    }

    public static SqlSession getSqlSessionAutoCommit(){
        return factory.openSession(true);
    }
}

DAO接口實現類 dao.UserinfoDaoImp.java

package dao;

import beans.UserInfo;
import org.apache.ibatis.session.SqlSession;
import utils.MybatisSessionManage;
import java.util.ArrayList;
import java.util.List;
public class UserinfoDaoImp implements IUserinfoDao {

    public void add(UserInfo user) {
        SqlSession session = MybatisSessionManage.getSqlSession();
        session.insert("addUser", user);
        session.commit();
        session.close();
    }

    public void getIdAfterAdd(UserInfo user){
        SqlSession session = MybatisSessionManage.getSqlSessionAutoCommit();
        session.insert("addUserAndQuery", user);
        session.close();
    }

    public void remove(UserInfo user) {
        SqlSession session = MybatisSessionManage.getSqlSessionAutoCommit();
        session.delete("deleteUser", user);
        session.close();
    }

    @Override
    public void update(UserInfo user) {
        SqlSession session = MybatisSessionManage.getSqlSessionAutoCommit();
        session.update("updateUser", user);
        session.close();
    }

    @Override
    public List<UserInfo> queryByField(String fieldVal) {
        List<UserInfo> list = new ArrayList<>();
        SqlSession session = MybatisSessionManage.getSqlSessionAutoCommit();
        list = session.selectList("queryByLike", fieldVal);
        return list;
    }


    @Override
    public UserInfo queryById(long id) {
        SqlSession session = MybatisSessionManage.getSqlSessionAutoCommit();
        UserInfo user = session.selectOne("userdao.queryById", id);
        return user;
    }

    @Override
    public List<UserInfo> queryAll() {
        SqlSession session = MybatisSessionManage.getSqlSessionAutoCommit();
        List<UserInfo> list = new ArrayList<>();
        list = session.selectList("queryAll");
        session.close();
        return list;
    }

}

單表插入一條記錄

<insert id="addUser" parameterType="UserInfo" useGeneratedKeys="true" keyProperty="id">
        insert into account (username, pwd, email)
        values (#{username}, #{pwd}, #{email})
</insert>
 public void add(UserInfo user) {
        SqlSession session = MybatisSessionManage.getSqlSession();
        session.insert("addUser", user);
        session.commit();
        session.close();
    }

    @Test
    public void add() {
        UserInfo user = new UserInfo("ZhangFei", "[email protected]", "3235168831");
        new UserinfoDaoImp().add(user);

    }



主鍵自增長插入1條記錄後查詢出剛插入的主鍵
這裏寫圖片描述


單表簡單刪除
這裏寫圖片描述


單表簡單更新
這裏寫圖片描述


根據ID查詢(查詢時最好帶上命名空間,防止與id相同命名空間不同的查詢衝突

這裏寫圖片描述


單表1個條件模糊查詢
這裏寫圖片描述


使用Mapper動態代理查詢

要求:

  • DAO層定義了數據訪問接口
  • 每個數據庫訪問的接口方法名與mapper.xml文件裏的select,delete,update,insert元素的id名需要保持一致
  • <mapper></mapper>標籤裏的 namespace 的值需要與DAO接口的全限定類名一致


    這裏寫圖片描述


    這裏寫圖片描述

設有beans.WorkInfo.java實體類,類定義如下:

package beans;

import java.text.SimpleDateFormat;
import java.util.Date;

public class WorkInfo {
    private Integer work_id;
    private String company;  //公司名稱
    private String position; //職位
    private String duty;     //崗位職責
    private Date departure;  //離職時間
    private Integer user_id; //關聯account表外鍵


    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("work_id:\t").append(this.work_id)
                .append("\ncompany:\t").append(this.company)
                .append("\nposition:\t").append(this.position)
                .append("\ndeparture:\t").append(this.formatDate(this.departure))
                .append("\nduty:\t").append(this.duty)
                .append("\nuser_id:\t").append(this.user_id).append("\n");
        return builder.toString();
    }

    private String formatDate(Date date){
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return dateFormat.format(date);
    }

    public WorkInfo(String company, String position,
                    String duty, Date departure, Integer user_id) {
        this.company = company;
        this.position = position;
        this.duty = duty;
        this.departure = departure;
        this.user_id = user_id;
    }

    public WorkInfo() {
        this.work_id = -1;
    }

   //此處省略getter和setter方法
}

實體類訪問數據庫的dao.IWorkInfoDao接口定義如下:

package dao;

import beans.WorkInfo;
import java.util.List;
import java.util.Map;

public interface IWorkInfoDao {
    void addWorkInfo(WorkInfo info);
    List<WorkInfo> queryWorkInfoByManyConditions(Map<String,Object> map);
    List<WorkInfo> queryWorkInfoByNumberIndex(Integer userIdRange, String prefixPosition);
}

數據庫裏有對應的表work_info,表定義如下:

 create table `work_info` (
  `work_id` int(11) not null auto_increment,
  `company` varchar(64),
  `position` varchar(32),
  `duty` varchar(128),
  `departure` date ,
  `user_id` int(11) ,

  primary key (`work_id`),
  key `fk_workinfo_account` (`user_id`),

  constraint `fk_workinfo_account` foreign key (`user_id`) references `account` (`id`)
) engine=InnoDB default charset=utf8



Mapper動態代理單表插入
這裏寫圖片描述


Mapper動態代理單表多條件查詢

  1. 方法1
    這裏寫圖片描述
  2. 方法2
    這裏寫圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章