Ibatis3.x实例
说明:此文档和之前发布的Ibatis2.x实例时我学习时做的实例,测试都已通过,将实例拿出来与大家分享,共同学习。浏览实例的时候注意他们之间的异同,希望对你有所帮助。
一、SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<!-- 配置资源文件 -->
<properties resource="dbconfig.properties">
<property name="username" value="root"/><!-- 此处并配置的属性将替换dbconfig.properties中的属性 -->
<property name="password" value="wuzhengfei"/>
</properties>
<!-- 改变Ibatis运行时的行为 -->
<settings>
<setting name="cacheEnabled" value="true" /><!-- 是否使用全局缓存 true|false true -->
<setting name="lazyLoadingEnabled" value="true" /> <!-- 是否使用全局懒加载 true|false true -->
<setting name="multipleResultSetsEnabled" value="true" /><!-- 是否允许返回多个结果集合(需要兼容的驱动) true|false true -->
<setting name="useColumnLabel" value="true" /><!-- 使用列标签取代列名(不同驱动表现不同) true|false true -->
<setting name="useGeneratedKeys" value="false" /><!-- 允许jdbc自动生成主键 true|false false -->
<setting name="defaultExecutorType" value="SIMPLE" /><!-- 配置默认执行方式 SIMPLE|REUSE|BATCH -->
<setting name="defaultStatementTimeout" value="25000" /><!-- 数据库超时时间 Any positive -->
</settings>
<typeAliases>
<typeAlias type="com.beans.User" alias="user"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/ibatis?useUnicode=true&characterEncoding=UTF-8" />
<property name="username" value="root"/>
<property name="password" value="wuzhengfei"/>
<property name="poolMaximumActiveConnections" value="10"/> <!-- 同一时间内最大连接数 默认10 -->
<property name="poolMaximumIdleConnections" value="5"/><!--连接最大空闲数目 -->
<property name="poolMaximumCheckoutTime" value="20000"/><!-- 连接被每个任务占用的最大时间 默认20000ms -->
<property name="poolTimeToWait" value="20000"/><!-- 连接池中无可用连接时,线程的等待时间 默认20000ms -->
<property name="poolPingQuery" value="NO"/><!-- 数据库连接状态检测语句,类似于ping的功能 默认NO PING QUERY SET -->
<property name="poolPingEnabled" value="true"/><!-- 是否允许ping检测 默认false -->
<property name="poolPingConnectionsNotUsedFor" value="0"/><!-- 对超过指定空闲时间的数据库连接进行状态监测 默认0 (必须在poolPingEnabled设置true情况下) -->
</dataSource>
</environment>
<environment id="test">
<transactionManager type="JDBC" />
<dataSource type="JNDI">
<property name="driver" value=""/>
<property name="url" value=""/>
<property name="username" value=""/>
<property name="password" value=""/>
<property name="env.encoding" value="UTF8"/>
<property name="initial_context" value=""/>
<property name="data_source" value=""/><!-- JNDI数据库名称 -->
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/beans/User.xml"/>
<!-- 使用绝对路径 -->
<!--
<mapper url="file:///.../AuthorMapper.xml"/>
-->
</mappers>
</configuration>
二、实体:
2.1、User.java
package com.beans ;
public class User {
private long id ;
private String username ;
private String password ;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String toString(){
return "id: "+id+" username: "+username + " password: "+password ;
}
}
2.2、映射文件
User.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="user">
<insert id="addUser" parameterType="User">
insert into User(id, username, password) values(#{id}, #{username}, #{password})
</insert>
<delete id="deleteUserById" parameterType="int" statementType="PREPARED">
delete from User where id = #{id}
</delete>
<sql id="userColumn">id, username, password</sql>
<select id="findAllUsers" resultType="User">
select <include refid="userColumn"/> from User
</select>
<select id="findUserById" statementType="PREPARED" useCache="true" resultType="user">
select <include refid="userColumn"/> from User where id = #{id, javaType=long, jdbcType=BIGINT}
</select>
<select id="findUserByName" parameterType="string" resultType="User">
select * from User as u where u.username like CONCAT('%',#{username},'%')
</select>
<update id="updateUser" parameterType="User">
update User set
username = #{username},
password = #{password}
where id = #{id}
</update>
</mapper>
3、接口
UserDao.java
package com.dao;
import java.util.List;
import com.beans.User;
public interface UserDao {
/**
* 插入User对象
* @param user
* @return 插入成功的记录数
*/
public int addUser(User user);
/**
* 根据Id删除User
* @param id
* @return 删除成功的记录数
*/
public int deleteUserById(long id);
/**
* 查出所有的User对象
* @return
*/
public List<User> findAllUsers();
/**
* 根据Id查找用户
* @param id
* @return
*/
public User findUserById(long id);
/**
* 更新用户信息
* @param user
* @return 更新的数据数目
*/
public int update(User user);
/**
* 根据用户名查找User 模糊查询
* @param username
* @return
*/
public List<User> findUserByName(String username);
}
四、实现
UserDaoImpl.java
package com.dao.impl;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.beans.User;
import com.dao.UserDao;
public class UserDaoImpl implements UserDao {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
// Properties props = Resources.getResourceAsProperties("dbConfig.properties");
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader,"development");
//如果sqlMapCofig中没有引入dbConfig.properties文件时,可以使用这种方式引入
//sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader,props);
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public SqlSession getSqlSession(){
return sqlSessionFactory.openSession() ;
}
@Override
public int addUser(User user) {
int successNum =0 ;
SqlSession sqlSession = getSqlSession();
try {
successNum = sqlSession.insert("addUser", user);
sqlSession.commit() ;
}finally{
sqlSession.close() ;
}
return successNum ;
}
@Override
public int deleteUserById(long id) {
int successNum =0 ;
SqlSession sqlSession = getSqlSession();
try {
successNum = sqlSession.delete("deleteUserById", id);
sqlSession.commit() ;
}finally{
sqlSession.close() ;
}
return successNum;
}
@SuppressWarnings("unchecked")
@Override
public List<User> findAllUsers() {
List<User> users = new ArrayList<User>();
SqlSession sqlSession = getSqlSession();
try {
users = sqlSession.selectList("findAllUsers");
sqlSession.commit() ;
} finally{
sqlSession.close() ;
}
return users;
}
@Override
public User findUserById(long id) {
User user = new User();
SqlSession sqlSession = getSqlSession();
try {
user = (User) sqlSession.selectOne("findUserById", id);
sqlSession.commit() ;
}finally{
sqlSession.close() ;
}
return user;
}
@Override
public List<User> findUserByName(String name) {
List<User> users = new ArrayList<User>();
SqlSession sqlSession = getSqlSession();
try {
users = sqlSession.selectList("findUserByName", name);
sqlSession.commit() ;
} finally{
sqlSession.close() ;
}
return users;
}
@Override
public int update(User user) {
int updateNumber = 0 ;
SqlSession sqlSession = getSqlSession();
try {
updateNumber = sqlSession.update("updateUser", user);
sqlSession.commit() ;
} finally{
sqlSession.close() ;
}
return updateNumber;
}
}
五、测试类:
UserDaoImplTester.java
package com.dao.impl;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import com.beans.User;
import com.dao.UserDao;
public class UserDaoImplTester {
private UserDao userDao ;
@Before
public void setUp() throws Exception {
userDao = new UserDaoImpl() ;
}
@Test
public void testAddUser() {
User user = new User();
user.setId(12);
user.setPassword("XXXX");
user.setUsername("XXXX");
userDao.addUser(user);
}
@Test
public void testDeleteUserById() {
userDao.deleteUserById(10);
}
@Test
public void testFindAllUsers() {
List<User> users = userDao.findAllUsers();
for(User user : users){
System.out.println(user);
}
}
@Test
public void testFindUserById() {
User user = userDao.findUserById(1);
System.out.println(user);
}
@Test
public void testFindUserByName() {
List<User> users = userDao.findUserByName("w");
for(User user : users){
System.out.println(user);
}
}
@Test
public void testUpdate() {
User user = userDao.findUserById(4);
System.out.println(user);
user.setUsername("海贼王");
user.setPassword("路飞");
userDao.update(user);
user = userDao.findUserById(4);
System.out.println(user);
}
}
六、日志文件:
为了方便大家查看sqlMap运行时到底使用的是什么Sql语句,此处将log4j.properties发出来,将此文件放在calsspath下后,运行时,控制台中将会打印出sql语句和出入的参数。
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.logger.com.ibatis=debug
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug,stdout
七、其他:
附件中是我找的的Ibatis3.x的资料,Ibatis3.x-reference-EN.pdf虽然是英文的,但是还是很好理解的,另外的是在网上看到的,也一起发出来,和大家分享。。。
分享到:
相关推荐
Java之iBatis 2.3.x是一个关于Java应用程序中持久层框架的讲解,主要讨论了对象关系映射(ORM)工具的选择以及iBatis的特点和使用方法。iBatis作为一个轻量级的ORM框架,提供了更加灵活的SQL定制能力,使得开发人员...
然而,对于新的项目,可能需要考虑升级到Ibatis的最新版本(目前是3.x),以利用其更丰富的特性,如注解支持、更好的类型处理等。 总的来说,Ibatis 2.3.4的实例和jar包为你提供了一个学习和实践的平台,通过深入...
3. log4j-x.x.x.jar:日志处理库,Ibatis默认使用Log4j进行日志输出。 4. slf4j-api-x.x.x.jar和slf4j-log4j12-x.x.x.jar:SLF4J(Simple Logging Facade for Java)接口,Ibatis推荐使用它作为日志框架的抽象层。 5...
Struts2、iBatis和Spring 2.x是经典的Java Web开发框架组合,它们共同构建了一个灵活、可扩展且易于管理的应用程序架构。这个入门实例是针对初学者设计的,旨在帮助理解这三个框架如何协同工作。 **Struts2** 是一...
1. **Ibatis框架**:下载并引入Ibatis的jar包到项目中,通常会包括`ibatis-3.x.x.jar`,以及其依赖的`slf4j-api-1.x.x.jar`和`log4j-1.x.x.jar`。 2. **MySQL JDBC驱动**:引入MySQL的JDBC驱动,如`mysql-connector-...
【Ibatis实例,手把手教你入门】 Ibatis,一个轻量级的Java持久层框架,以其灵活、...同时,随着Ibatis 3.x版本的发布,它引入了许多新功能和改进,比如支持注解配置,你可以尝试升级到新版本,进一步提升开发效率。
在文档的第2页和第3页,出现了iBATIS配置文件中的一些关键元素,如`<properties>`、`<setting>`、`<typeAlias>`、`<transactionManager>`、`<datasource>`、`<sqlMap>`等。这些元素是构建iBATIS映射文件的核心部分,...
3. `mybatis-spring-x.x.x.jar`:Ibatis与Spring框架整合的必备库,它提供了Spring与Ibatis之间的桥梁,使得在Spring应用中可以方便地使用Ibatis。这个jar包包含了一些Spring的Bean定义,如SqlSessionFactoryBean,...
在Java项目中,引入Ibatis框架的关键库包括`ibatis-3.x.x.jar`(主要的Ibatis核心库)、`slf4j-api-1.7.x.jar`(日志API)和`log4j-1.2.x.jar`(具体日志实现)。同时,如果你打算集成Struts和Spring,还需要它们的...
<version>3.x.x ``` 接下来,我们需要创建数据库连接配置。在Spring框架中,我们可以通过配置一个DataSource bean来实现,比如使用Apache的DBCP或HikariCP等连接池。同时,也需要配置SqlSessionFactory,它是...
内容包括iBATIS的基础知识、快速入门、高级特性等,通过实例解析iBATIS的使用方法。 总的来说,iBATIS是一个强大的ORM框架,通过合理的配置和使用,可以大大提高Java项目的开发效率,同时保持对SQL的灵活控制。对于...
1. **引入依赖**: 在项目中引入Ibatis的jar包,包括核心库mybatis-x.x.x.jar和相关数据库驱动。 2. **配置SqlMapConfig.xml**: 配置数据源、事务管理器等,例如使用JDBC数据源,配置如下: ```xml ...
在`Ibatis_home`文件中,可能包含了所需的jar包,例如`ibatis-3.x.x.jar`、`log4j.jar`等。这些jar包是运行Ibatis的基础,需要将它们添加到项目的类路径中。 3. **SqlMapConfig.xml配置** 这是Ibatis的核心配置...
在本项目中,"springboot+mysql+ibatis完整整合案例"是一个针对初学者的教程,旨在演示如何将Spring Boot、MySQL数据库和MyBatis框架有效地集成在一起,创建一个可运行的应用程序。以下是对这些技术及其整合过程的...
8. **实际案例**:教程通常会通过具体的实例,比如用户登录、商品添加等场景,来演示如何使用iBATIS进行数据库操作,帮助读者更好地理解理论知识。 9. **下载说明.txt**:这个文件可能是对教程获取和使用的一些说明...
在开始Ibatis实例之前,确保你的开发环境中已经安装了Java运行环境(JDK)和Maven或Gradle构建工具。Ibatis通常作为依赖库通过这些工具引入到项目中。 2. **项目集成**: 创建一个新的Java项目,然后在`pom.xml`...
3. **参数映射**:掌握如何将Java对象的属性值传递给SQL语句,例如使用`<parameterMap>`和`<parameter>`标签。 4. **结果集映射**:了解如何将查询结果自动封装到Java对象,包括一对一、一对多、多对多的关系映射。 ...
2. Mapper接口:在iBATIS 2.x版本中,主要通过SqlMapClient来执行SQL Maps;而在3.x版本中,引入了Mapper接口,使编程更加面向接口,提高了可读性和可维护性。 二、iBATIS的工作原理 1. 数据库操作的抽象:iBATIS...