下面是关于iBATIS部分的
使用的是 c3p0的数据库连接池
配置文件如下:
<!-- 连接池 -->
<bean id="ds1" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/maven?useUnicode=true&characterEncoding=utf8"/>
<property name="user" value="root"/>
<property name="password" value="root"/>
</bean>
<!-- 对应的映射文件 -->
<bean id="sqlMapClient1" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="WEB-INF/classes/SqlMaps-template.xml"></property>
<property name="dataSource" ref="ds1"/>
</bean>
<!-- 事务管理 -->
<bean id="tm1" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="ds1"/>
</bean>
<tx:annotation-driven transaction-manager="tm1" />
iBATIS的增删改查
查询
typeAlias 是定义一个别名,在引用的时候就不需要每次都输入包名+类名,只需一次引用
<typeAlias alias="Login" type="com.jokingus.model.pojo.Login" />
<typeAlias alias="User" type="com.jokingus.model.User" />
<select id="login" parameterClass="Login" resultClass="User" >
<![CDATA[
select * from users where uid = #uid# and pwd=#pwd# limit 1
]]>
</select>
使用:User user=(User) sqlMapClient.queryForObject("User.login",pojo);
注意:pojo这个对象的属性要与 <select>中的参数完全对应,即
public class Login {
private int uid;
private String pwd;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
而返回的字段名要与com.jokingus.model.User 这个类的属性完全对应
如果不对应,那么可以在这个类的属性上增加注解表明:
@Entity
@Table (name="users" )
public class User implements java.io.Serializable {
@Id
@Column (name="uid")
private String uid;
@Column
private String pwd;
@Column
private String firstName;
@Column
private String lastName;
<parameterMap class="com.jokingus.model.UserBean" id="fullParameterOfUser">
<parameter property="userName" jdbcType="VARCHAR" typeName="username"/>
<parameter property="password" jdbcType="VARCHAR" typeName="password"/>
<parameter property="email" jdbcType="VARCHAR" typeName="email"/>
<parameter property="score" jdbcType="INTEGER" typeName="score"/>
<parameter property="registerDate" jdbcType="Timestamp" typeName="registerdate"/>
</parameterMap>
<insert id="user_register" parameterMap="fullParameterOfUser">
insert into t_user(
username,password,email,score,registerdate
) values (
?,?,?,?,?
)
<selectKey resultClass="int" keyProperty="u_id" >
SELECT @@IDENTITY AS ID <!-- 返回插入的数据的主键值 -->
</selectKey>
</insert>
<!—删除操作 -->
<delete id="delete" parameterClass="User" >
<![CDATA[
delete from users where uid= #uid#
]]>
</delete>
<!—更新操作 -->
<update id="update" parameterClass="User" >
<![CDATA[
update users set pwd=#pwd#,firstname=#firstName#,lastname=#lastName# where uid=#uid#
]]>
</update>
iBATIS常用的操作函数:
sqlMapClient.queryForList() // 返回一个列表
sqlMapClient.queryForObject() // 返回的是单行记录,因此一定要保证SQL语句返回的结果最多一行记录
sqlMapClient.delete() //删除
sqlMapClient.insert() //插入
sqlMapClient.update() //更新
iBATIS 传递多个参数还可以通过map映射的方式,但是不推荐,映射过程会很影响效率
<settings useStatementNamespaces="true" cacheModelsEnabled="true" />
//设置是不是可以使用命名空间
命名空间的作用是为了防止id相同时引用错误,如果SQL语句很多,可以放置在不同的xml文件中,定义一个命名空间,如:namespace="User" ,只要在一个文件中不出现重复id,不同文件间出现重复则不影响,我们调用时则是通过命名空间+id 的方式调用。
Jstl的使用
首先在页面需要引入标签:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
需要的jar文件有:jstl.jar , standard.jar
普通的输出: ${info} ${user.name}
List循环 <c:forEach var="apply" items="${apply_list}">
判断:<c:if test="${sessionScope.userName!=null}">
对于session 的调用: ${sessionScope.userName}
在javascript中使用jstl:
var p_type="${product.p_type}";