在使用mybatis访问mysql数据库的第二版中,我们将接口与对应的SQL的ID进行关联,在main代码中只需要使用接口中的方法就可以直接操作数据库。现在,经常用到的实现方式是,将接口进行实现,在实现中指定操作数据的方法的名字与User.xml中对应的SQL的ID的对应关系。
对数据库的user表建立配置文件。这个文件中主要定义了SQL语句。对应的文件名称为User.xml,内容如下:
建立一个对user表操作的接口IUserDao.java,接口中的方法的名称,与User.xml中对应的SQL的ID可以不一样。内容如下:
将IUserDao.java进行继承,定义一个实现类UserDaoImpl.java。代码如下:
数据库访问测试程序:
基础表的配置略。与《使用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();
}
}
}
}
运行测试程序,可用看到程序对数据库表内容的操作。