使用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();
			}
		}
	}
}
运行测试程序,可用看到程序对数据库表内容的操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值