使用mybatis訪問mysql數據庫之三

在使用mybatis訪問mysql數據庫的第二版中,我們將接口與對應的SQL的ID進行關聯,在main代碼中只需要使用接口中的方法就可以直接操作數據庫。現在,經常用到的實現方式是,將接口進行實現,在實現中指定操作數據的方法的名字與User.xml中對應的SQL的ID的對應關係。

基礎表的配置略。與《使用mybatis訪問mysql數據庫之一》中的表一致。

工程的配置文件《Configuration.xml》同第一版,此處略。

User.java的代碼如下。各個字段需要與表中的字段名稱一致。

package com.baby.javaStudy.mybatis.v3;


public class User {
	private int id;
	private int classification;
	private String name;
	private String address;
	private String remark;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getClassification() {
		return classification;
	}
	public void setClassification(int classification) {
		this.classification = classification;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getRemark() {
		return remark;
	}
	public void setRemark(String remark) {
		this.remark = remark;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", classification=" + classification + ", name=" + name + ", address=" + address
				+ ", remark=" + remark + "]";
	}
}

對數據庫的user表建立配置文件。這個文件中主要定義了SQL語句。對應的文件名稱爲User.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.baby.javaStudy.mybatis.v3.UserMapperDao">

	<!-- 查詢數據 -->
	<select id="select" resultType="User">
		select * from user where id =
		#{id}
	</select>

	<!-- 增加數據 -->
	<insert id="add" parameterType="User" useGeneratedKeys="true"
		keyProperty="id">
		insert into user(classification,name,address,remark)
		values(#{classification},#{name},#{address},#{remark})
	</insert>

	<!-- 修改數據 -->
	<update id="update" parameterType="User">
		update user set remark
		=#{remark} where id=#{id}
	</update>

	<update id="update2" parameterType="User" statementType="STATEMENT">
	<![CDATA[
	update ${tablename} set remark =${remark} where id=${id} 
	]]>

	</update>

	<!-- 刪除數據 -->
	<delete id="delete" parameterType="int">
		delete from user where id =
		#{id}
	</delete>
</mapper>

建立一個對user表操作的接口IUserDao.java,接口中的方法的名稱,與User.xml中對應的SQL的ID可以不一樣。內容如下:

package com.baby.javaStudy.mybatis.v3;

public interface IUserDao {
	// 根據用戶ID查詢用戶信息
	public User select(int id);

	// 增加用戶信息
	public void add(User user);

	// 刪除用戶信息
	public void delete(int id);

	// 修改用戶信息
	public void update(User user);
	public void update2(User user);
}

將IUserDao.java進行繼承,定義一個實現類UserDaoImpl.java。代碼如下:

package com.baby.javaStudy.mybatis.v3;


import java.util.HashMap;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

public class UserDaoImpl implements IUserDao {

	// 需要向dao實現類中注入sqlSessionFactory
	private SqlSessionFactory sqlSessionFactory;

	// 在這裏用構造方法注入
	public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
		this.sqlSessionFactory = sqlSessionFactory;
	}

	public User select(int id) {
		SqlSession session = sqlSessionFactory.openSession();
		User user = session.selectOne("com.baby.javaStudy.mybatis.v3.UserMapperDao.select", id);
		session.close();
		return user;
	}

	public void add(User user) {
		SqlSession session = sqlSessionFactory.openSession();
		session.insert("com.baby.javaStudy.mybatis.v3.UserMapperDao.add", user);
		session.commit();
		session.close();

	}

	public void delete(int id) {
		SqlSession session = sqlSessionFactory.openSession();
		session.delete("com.baby.javaStudy.mybatis.v3.UserMapperDao.delete", id);
		session.commit();
		session.close();

	}

	public void update(User user) {
		SqlSession session = sqlSessionFactory.openSession();
		session.update("com.baby.javaStudy.mybatis.v3.UserMapperDao.update", user);
		session.commit();
		session.close();
	}
	
	public void update2(User user) {
		SqlSession session = sqlSessionFactory.openSession();
		Map<String,Object> params = new HashMap<String,Object>();
		params.put("tablename","user");
		params.put("remark","'modified by dynamic sql'" );
		params.put("id", user.getId());
		
		
		//getSqlMapClientTemplate().update("com.baby.study.javaStudy.mybatis.UserMapperDao.update2",params);
		session.update("com.baby.javaStudy.mybatis.v3.UserMapperDao.update2", params);
		session.commit();
		session.close();
	}

}

數據庫訪問測試程序:

package com.baby.javaStudy.mybatis.v3;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class UserTestV3 {
	public static void main(String[] args) {
		SqlSessionFactory sqlSessionFactory = null;
		SqlSession session = null;
		String resource = "com/baby/javaStudy/mybatis/v3/Configuration.xml";
		InputStream inputStream;
		try {
			inputStream = Resources.getResourceAsStream(resource);
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			IUserDao userDao = new UserDaoImpl(sqlSessionFactory);
			// 查詢
			User user = userDao.select(1);
			System.out.println("查詢得到的信息是:" + user);

			// 修改
			user = userDao.select(1);
			user.setRemark("modified by wanglc using mybatis.v3");
			System.out.println("修改後的信息爲:" + user);
			userDao.update(user);

			// 添加
			user = new User();
			user.setClassification(1);
			user.setName("baby");
			user.setAddress("zhengzhou");
			user.setRemark("added by mybatis.v3");
			System.out.println("新添加的信息是:" + user);
			userDao.add(user);

			// 刪除
			userDao.delete(3);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (session != null) {
				session.close();
			}
		}
	}
}
運行測試程序,可用看到程序對數據庫表內容的操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章