Spring mvc ,spring ,ibatis 学习记录(2)

原创
2014/10/08 10:12
阅读数 34

下面是关于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&amp;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}";

 

 

 

展开阅读全文
打赏
1
2 收藏
分享
加载中
更多评论
打赏
0 评论
2 收藏
1
分享
返回顶部
顶部