使用mybatis访问mysql数据库之三

来源:互联网 发布:淘宝外贸原单男装 编辑:程序博客网 时间:2024/05/20 09:26
在使用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;}@Overridepublic 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实现类中注入sqlSessionFactoryprivate 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 0