注意:本文配置不涉及Spring,仅限于Mybatis内。
思路:
1、configuration.xml配置文件中environments内参数写成动态传参;
2、DBUtil类中构建SQLSessionFactory时读取传入的数据库连接配置信息动态生成。
案例如下:
1)configuration.xml配置信息:
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="UNPOOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
2)DBUtil类:
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
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 com.sz.properties.MG01;
public class DBUtil {
public SqlSession getSqlSession(Properties properties) throws IOException {
// 通过配置文件获取数据库连接信息
InputStream stream = Resources.getResourceAsStream("Configuration.xml");
/*
System.out.println(properties.getProperty("jdbc.driver"));
System.out.println(properties.getProperty("jdbc.url"));
System.out.println(properties.getProperty("jdbc.user"));
System.out.println(properties.getProperty("jdbc.password"));
*/
// 通过配置信息构建一个SQLSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream,properties);
// 通过sqlSessionFactory打开一个数据库会话
SqlSession sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}
// 测试主方法
public static void main(String[] args) {
SqlSession sqlSession = null;
try {
sqlSession = new DBUtil().getSqlSession(DBProperties.CS15);
System.out.println(sqlSession);
} catch (IOException e) {
e.printStackTrace();
} finally {
if(session != null){
session.close();
}
}
}
}
3)DBProperties工具类:
import java.util.Properties;
public class DBProperties {
public static final Properties MG01;
public static final Properties CS15;
static{
MG01 = new Properties();
MG01.setProperty("jdbc.driver", "oracle.jdbc.driver.OracleDriver");
MG01.setProperty("jdbc.url", "jdbc:oracle:thin:@192.168.0.0:1521/mg01");
MG01.setProperty("jdbc.user", "xxx");
MG01.setProperty("jdbc.password", "xxx");
CS15 = new Properties();
CS15.setProperty("jdbc.driver", "oracle.jdbc.driver.OracleDriver");
CS15.setProperty("jdbc.url", "jdbc:oracle:thin:@192.168.0.0:1521/mg15");
CS15.setProperty("jdbc.user", "xxx");
CS15.setProperty("jdbc.password", "xxx");
}
}
4)javabean:User类
/**
* 账号密码实体类
*/
public class User {
private String uer;
private String pwd;
public String getUer() {
return uer;
}
public void setUer(String uer) {
this.uer = uer;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
5)IUser接口
import java.util.Map;
import com.sz.bean.User;
public interface IUser {
User login(Map<String, String> parameterMap);
}
6)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.sz.dao.IUser">
<resultMap type="com.sz.bean.User" id="UserResult">
<result column="username" jdbcType="VARCHAR" property="uer"/>
<result column="password" jdbcType="VARCHAR" property="pwd"/>
</resultMap>
<select id="login" parameterType="java.util.Map" resultMap="UserResult">
select username, password from sz_user where username = #{uer} and password = #{pwd}
</select>
</mapper>
7)UserAction类
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import com.opensymphony.xwork2.ActionSupport;
import com.sz.bean.User;
import com.sz.dao.IUser;
import com.sz.db.DBUtil;
import com.sz.properties.DBProperties;
@SuppressWarnings("serial")
public class UserAction extends ActionSupport {
private String uer = "";// 账号
private String pwd = "";// 密码
public String login(){
if(uer != null && pwd != null){
Map<String, String> parameterMap = new HashMap<String, String>();
DBUtil util = new DBUtil();
SqlSession session = null;
User user = null;
parameterMap.put("uer", uer);
parameterMap.put("pwd", pwd);
try {
session = util.getSqlSession(DBProperties.DMS);
IUser iuser = session.getMapper(IUser.class);
user = iuser.login(parameterMap);
} catch (IOException e) {
e.printStackTrace();
} finally {
if(session != null){
session.close();
}
}
if(uer.equals(user.getUer())){
return "main";
}
return "error";
}
return "error";
}
/*
* 测试参数传输
*/
public String test(){
System.out.println(getUer());
System.out.println(getPwd());
return "error";
}
public String getUer() {
return uer;
}
public void setUer(String uer) {
this.uer = uer;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
8)struts2.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="admin" extends="struts-default" namespace="/">
<action name="User_*" method="{1}" class="com.sz.action.UserAction">
<result name="main">main.jsp</result>
<result name="error">login.jsp</result>
</action>
</package>
</struts>
9)页面表单请求
<div class="main">
<div class="center">
<form action="User_login" id="formOne" method="post" onsubmit="return submitB()" >
<br/><br/>
<i class="fa fa-user Cone"> | </i>
<input type="text" name="uer" id="user" placeholder="用户名"onblur="checkUser()"/>
<span id="user_pass"></span>
<br/>
<i class="fa fa-key Cone"> | </i>
<input type="password" name="pwd" id="pwd" placeholder="密码"onblur="checkUser1()"/>
<span id="pwd_pass"></span>
<br/>
<input type="submit" value="登 录" id="submit" name="submit" />
<br/>
</form>
</div>
</div>
这样案例就可以跑起来了!(本案例配合struts2网页调用)