- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章ibatis学习之搭建Java项目由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
IBATIS简介 。
ibatis是 Apache的开源项目,一个ORM 解决方案,ibatis最大的特点就是小巧,上手很快.
使用 ibatis提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过Hibernate 实现ORM而言是基本一致的.
iBatis是一个基于SQL映射支持Java和·NET的持久层框架,相对Hibernate和ApacheOJB等“一站式”ORM解决方案而言,iBatis 是一种“半自动化”的ORM实现.
1、JAR包依赖 。
ibatis-2.3.4.726.jar 。
mysql-connector-java-5.0.8-bin.jar 。
2、SqlMap.properties 。
1
2
3
4
|
driver
=
com.mysql.jdbc.Driver
url
=
jdbc:mysql:
/
/
127.0
.
0.1
:
3306
/
test
username
=
root
password
=
root
|
3、SqlMapConfig.xml 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<?
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
>
<!-- 引用JDBC属性的配置文件 -->
<
properties
resource
=
"com/ligang/SqlMap.properties"
/>
<!-- 使用JDBC的事务管理 -->
<
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
resource
=
"com/ligang/Student.xml"
/>
</
sqlMapConfig
>
|
4、Student.xml 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
<?
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
>
<!-- 通过typeAlias使得我们在下面使用Student实体类的时候不需要写包名 -->
<
typeAlias
alias
=
"Student"
type
=
"com.ligang.Student"
/>
<!-- id表示select里的sql语句,resultClass表示返回结果的类型 -->
<
select
id
=
"findAll"
resultClass
=
"Student"
>
select * from student
</
select
>
<!-- parameterClass表示参数的内容 -->
<
select
id
=
"findByID"
parameterClass
=
"String"
resultClass
=
"Student"
>
select * from student where id = #id#
</
select
>
<
insert
id
=
"insertStudent"
parameterClass
=
"Student"
>
insert into Student(id,name,age,address) values(#id#,#name#,#age#,#address#)
<!-- 返回自动增长值 -->
<
selectKey
resultClass
=
"String"
keyProperty
=
"id"
>
select @@identity as inserted
</
selectKey
>
</
insert
>
<
delete
id
=
"deleteStudentByID"
parameterClass
=
"String"
>
delete from student where id = #id#
</
delete
>
<
delete
id
=
"deleteStudent"
parameterClass
=
"Student"
>
delete from Student where id = #id#
</
delete
>
<
update
id
=
"updateStudent"
parameterClass
=
"Student"
>
update student set name=#name#,age=#age#,address=#address# where id = #id#
</
update
>
<!-- 模糊查询,使用$代替#。此种方法就是去掉了类型检查,使用字符串连接,不过可能会有sql注入风险-->
<
select
id
=
"selectByLike"
parameterClass
=
"String"
resultClass
=
"Student"
>
select * from student where name like '%$name$%'
</
select
>
<!-- 多条件组合查询 -->
<!-- 方法一(对象构造查询参数) -->
<!-- 项目中在写ibatis中的sql语句时,where user_id in (#user_id_list# ),运行时总是不行,这里不该用#,而应该用$,区别如下:
1.#是把传入的数据当作字符串,如#user_id_list#传入的是1,2,则sql语句生成是这样,in ('1,2') ,当然不可以
2.$传入的数据直接生成在sql里,如#user_id_list#传入的是1,2,则sql语句生成是这样,in(1,2) 这就对了.
3.#方式能够很大程度防止sql注入.
4.$方式无法方式sql注入.
5.$方式一般用于传入数据库对象.例如传入表名.
6.一般能用#的就别用$.
直观的说
#str# 出来的效果是 'str'
$str$ 出来的效果是 str
另外 ##只能用在特定的几个地方 $$可以用在任何地方 比如 order by $str$
你甚至可以直接写 $str$ 把 order by 这个字串放在str里传进来 -->
<
select
id
=
"findByCon1"
parameterClass
=
"Student"
resultClass
=
"Student"
>
select * from student where name like '%$name$%' and age >= #age#
</
select
>
<!-- 方法二(map封装查询参数) -->
<
parameterMap
class
=
"java.util.HashMap"
id
=
"paramMap"
>
<
parameter
property
=
"name"
/>
<
parameter
property
=
"age"
/>
</
parameterMap
>
<
select
id
=
"findByCon2"
parameterMap
=
"paramMap"
resultClass
=
"Student"
>
select * from student where name like ? and age >= ?
</
select
>
</
sqlMap
>
|
5、JAVA代码 。
实体类:略 。
Dao:略 。
DaoImpl:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
package
com.ligang;
import
java.io.IOException;
import
java.io.Reader;
import
java.sql.SQLException;
import
java.util.ArrayList;
import
java.util.HashMap;
import
java.util.List;
import
java.util.Map;
import
com.ibatis.common.resources.Resources;
import
com.ibatis.sqlmap.client.SqlMapClient;
import
com.ibatis.sqlmap.client.SqlMapClientBuilder;
public
class
StudentDaoImpl
implements
StudentDao {
public
static
SqlMapClient sqlMapClient =
null
;
static
{
try
{
Reader reader = Resources.getResourceAsReader(
"com/ligang/SqlMapConfig.xml"
);
sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
}
catch
(IOException e) {
e.printStackTrace();
}
}
public
List<Student> findAll() {
List<Student> list =
null
;
try
{
list = sqlMapClient.queryForList(
"findAll"
);
}
catch
(SQLException e) {
e.printStackTrace();
}
return
list;
}
public
Student findByID(String id){
Student student =
null
;
try
{
student = (Student) sqlMapClient.queryForObject(
"findByID"
, id);
}
catch
(SQLException e) {
e.printStackTrace();
}
return
student;
}
public
void
addStudent(Student student){
try
{
sqlMapClient.insert(
"insertStudent"
,student);
}
catch
(SQLException e) {
e.printStackTrace();
}
}
public
void
deleteStudentByID(String id){
try
{
sqlMapClient.delete(
"deleteStudentByID"
,id);
}
catch
(SQLException e) {
e.printStackTrace();
}
}
public
void
deleteStudent(Student student){
try
{
sqlMapClient.delete(
"deleteStudent"
,student);
}
catch
(SQLException e) {
e.printStackTrace();
}
}
public
void
updateStudent(Student student){
try
{
sqlMapClient.update(
"updateStudent"
, student);
}
catch
(SQLException e) {
e.printStackTrace();
}
}
public
List<Student> findByCon(String name){
List<Student> stuList =
new
ArrayList<Student>();
try
{
stuList = sqlMapClient.queryForList(
"selectByLike"
,name);
}
catch
(SQLException e) {
e.printStackTrace();
}
return
stuList;
}
public
List<Student> findByCon(Student student){
List<Student> stuList =
new
ArrayList<Student>();
try
{
stuList = sqlMapClient.queryForList(
"findByCon1"
,student);
}
catch
(SQLException e) {
e.printStackTrace();
}
return
stuList;
}
public
List<Student> findByCon(Map map){
List<Student> stuList =
new
ArrayList<Student>();
try
{
stuList = sqlMapClient.queryForList(
"findByCon2"
,map);
}
catch
(SQLException e) {
e.printStackTrace();
}
return
stuList;
}
}
|
总结 。
通过学习我们会发现,Hibernate体系中的内容真的很多,而ibatis更容易上手,小巧灵活。本文有关ibatis搭建Java项目的介绍就到这里,希望对大家有所帮助.
原文链接:http://blog.csdn.net/ligang2585116/article/details/43410697 。
最后此篇关于ibatis学习之搭建Java项目的文章就讲到这里了,如果你想了解更多关于ibatis学习之搭建Java项目的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
有谁知道当省略了flushInterval时iBATIS cacheModel的行为是什么,比如说缓存类型是MEMORY?我希望它只是将缓存结果无限期地保留在内存中。我有一组结果,如果不重新启动服务器
我需要一个解决方案来取消长时间运行的选择语句。我正在使用 Spring 3.0.2、iBatis 2.3.0 和 Oracle 10g。我设法让它与普通 JDBC 一起工作,但是因为选择是通过高级搜索
我有两个表的数据库 post: id post_name post_desc files: file_id file_name pos
Spring4.2.0不支持ibatis。我的项目正在从 Spring 3.2.4 升级到 Spring 4.2。当我用谷歌搜索时,我发现 spring4.2 与 mybatis 的集成示例,但没有与
根据用户指南,我可以使用文件路径而不是资源: // Using classpath relative resources // Using url fully qualified pat
我有一个 iBatis 查询,例如 但是像 lowerLimit、upperLimit、maxLowerLimit、maxUpperLimit 和 state 这样的字段可能为 null,
我写了一个查询:- select userid,endpointarns from t_user_actives where sid=#{sid} and (userid i
我在 weblogic 10.3.6 中使用 spring 3.2.0 和 ibatis 2.3.4在 weblogic 中部署时。 我收到此 NoSuchMethodError 如下: User d
假设我有一个查询 getUser有两个参数 - 用户名和密码。我想要一个像这样的映射器方法: public UserBean getUser(String userName, String passw
我在生产应用程序中使用的是iBatis-2.3.4.726。我想迁移生产应用程序以使用MyBatis。 在迁移过程中我需要考虑哪些要点? 是否有任何配置更改,或者MyBatis支持iBatis配置作为
我试图将startSequenceId,stopSequenceId和orderNumber传递到SQL映射中,但是,我不想使用类型化的对象,即parameterType="com.abc.Order
要删除的字符串ID为 复制代码代码如下: string SDSALES_IDString = 1,2,3,4,5,6,7 //转成Array Array a
我目前正在使用 ibatis 返回一些 pojo,一切都很好。 我的问题是: 我必须从表中返回 1 行,就像 3 个字段一样,我不想为它创建一个 pojo。我只想运行查询并获取 3 个值。有没有简单的
我在 iBatis 中有几个嵌套的 ResultMaps,它们具有完全相同的数据库列名。这会导致歧义,并导致为不同的数据库表检索到不正确的结果。 例如,`
现有代码库的 Java 升级和 Wildfly 升级已完成。在具有 Wildfly 服务器的 Windows 上,应用程序已正确部署。在具有 Wildfly 服务器的 Unix 上,应用程序部署失败,
我在 MyBatis v3 映射器 xml 中动态生成 where 子句。不过加括号确实很麻烦。有没有更简单的方法来处理这个问题而不使用 if 语句?
我现在的处境很复杂。我需要向 iBATIS select 传递三个参数,其中 2 个是 String ,1 个是 List 。 列表看起来像: List userList=new List(); pu
我有一个 select 语句,它返回相同数据类型 (VARCHAR) 的值列表。结果介于 1 到 6 行之间。我使用 queryForList() 并将响应存储在 List 对象中。执行时出现错误 -
谁能告诉我这是怎么回事?我有两个程序和两个映射。一个工作正常,另一个失败。这个工作正常:
在我的项目中,我们使用springmvc、spring和ibatis框架,问题是:在我的 dao 代码中是: @Override public Integer insertAdzoneEnvInfoB
我是一名优秀的程序员,十分优秀!