其实java类中也可以用的。
在黑河等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、做网站 网站设计制作按需网站设计,公司网站建设,企业网站建设,成都品牌网站建设,成都营销网站建设,外贸营销网站建设,黑河网站建设费用合理。
配置了tomcat的jndi数据库连接池,需要启动tomcat服务。而jsp运行正好需要启动tomcat,这样就可以初始化了tomcat的jndi数据库连接池。
而在java类的main主方法里面调用jndi数据库连接池肯定不行,因为main是静态的,当main运行时,jndi还没有初始化呢。所以你可以通过jsp向servlet请求,然后通过java类dao来调用jndi数据库连接池,这样在java类中也就可以调用jndi数据库连接池了!
我使用的环境是netbeans6.7,ibatis-2.3.4,mysql5.1,tomcat6.018。
整个过程分为两步:创建数据库和创建一个简单的web工程。
首先,创建一个示例数据库。我使用的sql语句如下:
[java] view plain copy print?
Create database SimpleIBatis;
use SimpleIBatis;
create table User(
ID int(3) not null auto_increment primary key,
User_Name char(10) not null,
User_Password char(10) not null,
User_Time timestamp
);
insert into User(User_Name, User_Password) values('test', 'test');
其次,新建一个Java web工程
在netbeans中,新建一个名为”SimpleIBatis“的Java web工程,在库中添加ibatis的包。
在 源包中新建这几个文件:persistence.SqlMap.java, persistence.domain.User.java, persistence.sql.SqlMapConfig.xml, persistence.sql.User.xml,其实就是三个包加里面的四个文件。源码分别如下:
SqlMap.java:
[java] view plain copy print?
package persistence;
import com.ibatis点抗 mon.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import persistence.domain.User;
public class SqlMap {
private static SqlMapClient sqlMapper;
static{
try{
Reader reader = Resources.getResourceAsReader("persistence/sql/SqlMapConfig.xml");
sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
}catch(IOException e){
System.err.println("An error occured on reading SqlMapConfig.xml ");
e.printStackTrace();
}
}
public static User selectUserById(int id) throws SQLException{
return (User) sqlMapper.queryForObject("selectUserById", id);
}
}
User.java
[java] view plain copy print?
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package persistence.domain;
public class User {
private int id;
private String username;
private String password;
private String time;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getUsername() {
return username;
}
public void setUsername(String userName) {
this.username = userName;
}
}
SqlMapConfig.xml
[xhtml] view plain copy print?
?xml version="1.0" encoding="UTF-8"?
!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
""
sqlMapConfig
transactionManager type="JDBC" commitRequired="false"
dataSource type="JNDI"
property name="DataSource" value="java:comp/env/SimpleIBatis"/
/dataSource
/transactionManager
sqlMap resource="persistence/sql/User.xml"/
/sqlMapConfig
User.xml
[xhtml] view plain copy print?
?xml version="1.0" encoding="UTF-8"?
!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
""
sqlMap namespace="User"
typeAlias alias="User" type="persistence.domain.User"/
select id="selectUserById" parameterClass="int" resultClass="User"
select
ID as id,
User_Name as username,
User_Password as password,
User_Time as time
from User
where ID = #id#
/select
/sqlMap
在index.jsp中的代码:
[java] view plain copy print?
%@page contentType="text/html" pageEncoding="UTF-8"%
%@page import="persistence.SqlMap, persistence.domain.User" %
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
""
html
head
meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
titleJSP Page/title
/head
body
p
%
User user = SqlMap.selectUserById(1);
String username = user.getUsername();
String password = user.getPassword();
%
UserName:%=username%br/
PassWord:%=password%
/p
/body
/html
附:
刚刚测试了下,在User.xml的select语句中可以不将全部字段选出来,那些没有在select的字段默认值为null之类的。如下面是我测试用的select语句:
[xhtml] view plain copy print?
?xml version="1.0" encoding="UTF-8"?
!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
""
sqlMap namespace="User"
typeAlias alias="User" type="persistence.domain.User"/
select id="selectUserById" parameterClass="int" resultClass="User"
select
User_Password as password
from User
where ID = #id#
/select
/sqlMap
我们公司就用jndi,存在就有它的道理,
1、可以不用暴露数据库用户名、密码在代码配置中(尤其安全性要求高的项目)
2、有跨库事务时代码处理更简单(用的是resin容器)
3、打war包时不用区分测试生产配置,不用担心配置错数据库
你可以把JNDI看成是名称和值的对应关系就好了,用的时候取名字,至于值是什么,可以随时改变而不影响使用,使用的时候只任名字,这样可以把数据库的具信息封装隔离开来,而不用硬编码;至于具体的代码,每个Web服务器都不一样,不必太计较,看文档就可以了