ibatis实践

1.iBatis的总配置文件是sqlMapConfig.xml,其代码如下:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMapConfig     
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"     
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>

<!-- 加载属性文件-->
<properties resource="com/ibatis/sqlMap.properties" />
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="128"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="true"
defaultStatementTimeout="15"
statementCachingEnabled="true"
classInfoCacheEnabled="true"
/>

<transactionManager type="JDBC" >
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}"/>
<property name="JDBC.ConnectionURL" value="${url}"/>
<property name="JDBC.Username" value="${username}"/>
<property name="JDBC.Password" value="${password}"/>
</dataSource>
</transactionManager>

<!-- 加载sqlmap -->
<sqlMap resource="com/ibatis/Student.xml" />
</sqlMapConfig>

2.属性文件sqlMap.properties是配置数据库的文件,其代码如下:

driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
username=crws
password=crws

3.sqlMap文件Student.xml是具体的sql语句,其代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="Student">
<typeAlias alias="Student" type="com.ibatis.Student"/>
<!--
<resultMap class="" id="">
   <result property="" column=""/>
</resultMap>
-->
<!-- 查询所有记录 -->
<select id="selectAllStudent" resultClass="Student">
<!--
   id 代表下面的sql语句;resultClass的值Student代表com.ibatis.Student
-->
select * from STUDENT
</select>

<!-- 查询指定id的记录 -->
<select id="selectStudentById" parameterClass="int" resultClass="Student">
<!--
   parameterClass 代表要输入值的类型
-->
select * from STUDENT where sid=#sid#
</select>

<!-- 插入一条记录 -->
<insert id="insertStudent" parameterClass="Student">
insert into STUDENT(sid,sname,major,birth,score)
values(#sid#,#sname#,#major#,#birth#,#score#)
<!--
   此处的#sid# 不能写成#id#,因为此处没有getId()方法。
-->
</insert>

<!-- 删除指定id的记录 -->
<delete id="deleteStudentById" parameterClass="int">
delete from STUDENT where sid=#sid#
<!--
   此处的#sid# 能写成#id#,因为只是作为参数传递的。
-->
</delete>

<!-- 修改记录 -->
<update id="updateStudent" parameterClass="Student">
update STUDENT set
sname=#sname#,
major=#major#,
birth=#birth#,
score=#score#
where sid=#sid#
</update>

<!-- 模糊查询 -->
<!-- 注意查询时的格式 '%$...$%' -->
<select id="selectStudentByName" parameterClass="String" resultClass="Student">
select * from STUDENT
where sname like '%$sname$%'
</select>

<!-- 根据主键序列插入记录 -->
<insert id="insertStudentBySequence" parameterClass="Student">
<selectKey resultClass="int" keyProperty="sid">
   select studentPKSequence.nextVal from dual
</selectKey>
   insert into STUDENT(sid,sname,major,birth,score)
values(#sid#,#sname#,#major#,#birth#,#score#)
</insert>
</sqlMap>

4.编写实体类Student.java,其代码如下:

package com.ibatis;

import java.util.Date;

public class Student {
//要保证有无参数的构造方法
private int sid;
private String sname;
private String major;
private Date birth;
private String score;
public Date getBirth() {
   return birth;
}
public void setBirth(Date birth) {
   this.birth = birth;
}
public String getMajor() {
   return major;
}
public void setMajor(String major) {
   this.major = major;
}
public String getScore() {
   return score;
}
public void setScore(String score) {
   this.score = score;
}
public int getSid() {
   return sid;
}
public void setSid(int sid) {
   this.sid = sid;
}
public String getSname() {
   return sname;
}
public void setSname(String sname) {
   this.sname = sname;
}
public String toString(){
   String content = "sid:"+sid+"\tsname:"+sname+"\tmajor:"+major+"\tbirth:"+birth+"\tscore:"+score;
   return content;
}
}
5.编写dao文件,其代码如下:

package com.ibatis;

import java.util.List;

public interface IStudentDAO {
public void addStudent(Student s);
public void addStudentBySequence(Student s);
public void deleteStudentById(int id);
public void updateStudent(Student s);
public List<Student> queryAllStudent();
public List<Student> queryStudentByName(String name);
public Student queryStudentById(int id);
}

6.编写dao实现类文件,其代码如下:

package com.ibatis;

import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;
import java.sql.Date;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class IStudentDAOImpl implements IStudentDAO {

private static SqlMapClient sqlMapClient = null;
static{
   try{
    String resource = "com/ibatis/sqlMapConfig.xml";
    Reader reader = Resources.getResourceAsReader(resource);
    sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
    reader.close();
   }catch(IOException e){
    e.printStackTrace();
   }
}
public void addStudent(Student s) {
   // TODO Auto-generated method stub
   try{
   sqlMapClient.insert("insertStudent", s);
   }catch(SQLException e){
    e.printStackTrace();
   }
}

public void addStudentBySequence(Student s) {
   // TODO Auto-generated method stub
   //step1:从数据库序列中获取主键值
   //step2:插入  
   try{
   sqlMapClient.insert("insertStudentBySequence",s);
  
   //插入成功,打印出结果
   System.out.println(s.getSid());
   }catch(SQLException e){
    e.printStackTrace();
   }
}

public void deleteStudentById(int id) {
   // TODO Auto-generated method stub
   try{
    System.out.println(sqlMapClient.delete("deleteStudentById",id));
    //删除操作返回影响的行数的数目
   }catch(SQLException e){
    e.printStackTrace();
   }
}

public List<Student> queryAllStudent() {
   List<Student> studentList = null;
   try{
   studentList = sqlMapClient.queryForList("Student.selectAllStudent");

//当使用namespace时,必须指定如上的格式
   }catch(SQLException e){
    e.printStackTrace();
   }
   return studentList;
}

public Student queryStudentById(int id) {
   // TODO Auto-generated method stub
   Student s = null;
   try{
   s = (Student)sqlMapClient.queryForObject("selectStudentById", id);
   }catch(SQLException e){
    e.printStackTrace();
   }
   return s;
}

public List<Student> queryStudentByName(String name) {
   // TODO Auto-generated method stub
   List<Student> studentList = null;
   try{
    studentList = sqlMapClient.queryForList("selectStudentByName",name);
   }catch(SQLException e){
    e.printStackTrace();
   }
   return studentList;
}

public void updateStudent(Student s) {
   // TODO Auto-generated method stub
   try{
    System.out.println(sqlMapClient.update("updateStudent",s));
    //更改操作返回影响的行数的数目
   }catch(SQLException e){
    e.printStackTrace();
   }
}
public static void main(String[] args) {
   IStudentDAO dao = new IStudentDAOImpl();
  
   //删除指定id的学生
//   dao.deleteStudentById(100);
  
   //查询所有的学生
   for(Student student:dao.queryAllStudent()){
    System.out.println(student);
   }
  
   //查询一个指定的学生
//   System.out.println(dao.queryStudentById(1));
  
   //增加一个学生
//   Student s = new Student();
//   s.setSid(100);
//   s.setSname("li");
//   s.setMajor("English");
//   s.setBirth(Date.valueOf("2009-09-09"));
//   s.setScore("90");
//   dao.addStudent(s);
  
   //更改学生
//   Student s = new Student();
//   s.setSid(1);
//   s.setSname("li");
//   s.setMajor("English");
//   s.setBirth(Date.valueOf("2009-09-09"));
//   s.setScore("90");
//   dao.updateStudent(s);
  
   //模糊查询
//   for(Student student:dao.queryStudentByName("i")){
//   System.out.println(student);
// }
   //通过序列插入数据
//   Student s = new Student();
//   s.setSid(1);
//   s.setSname("li");
//   s.setMajor("English");
//   s.setBirth(Date.valueOf("2009-09-09"));
//   s.setScore("90");
//   dao.addStudentBySequence(s);

}

}
短短几个文件,就构成了ibatis的简单应用,可以看到ibatis是轻量级的数据持久化方法,掌握也比较容易!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值