`
lyb520320
  • 浏览: 80073 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

iBATIS3.0学习(二)使用iBATIS3.0注解完成对数据库的简单操作

阅读更多

 使用iBATIS3.0注解完成对数据库的简单操作

    iBATIS3.0也增加了一些简单的注解,iBATIS3的注解只能完成一些简单操作,要进行更复杂的操作,最好是在XML文件中配置。

    在数据库(本人使用的mysql)中建立一个person表:

DROP TABLE IF EXISTS `test`.`person`;
CREATE TABLE  `test`.`person` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(20) default NULL,
  `sex` varchar(8) default NULL,
  `birthday` datetime default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

    在MyEclipse新建一个Java Project,结构如下图



 

    在jdbc.properties文件是映射文件要使用的,其内容如下:

 

driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/test
username=root
password=123456

 SqlMapper.xml是iBATIS的配置文件,其代码如下:

<?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="jdbc.properties"/>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC"/>
			<dataSource type="POOLED">
				<property name="driver" value="${driver}"/>
				<property name="url" value="${url}"/>
				<property name="username" value="${username}"/>
				<property name="password" value="${password}"/>
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="cn/ibatis3/test/annotation/person.xml"/>
	</mappers>
</configuration>

 上面文件中的sql映射文件person.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="cn.ibatis3.test.annotation.PersonMapper">

</mapper>

     注意:在iBATIS3中,命名空间(namespace)是必须的,如果不使用注解的话,名字可以自己定义。一旦使用了注解,这里必须是那个使用注解类或接口的全名。

     Person.java的代码请参考我的《iBATIS3学习(一)》

    sessionFactory.java和我前面的《iBATIS3学习(一)》一样,只是注意将:

private String resource="cn/ibatis3/test/SqlMapper.xml";
改为private String resource="cn/ibatis3/test/annotation/SqlMapper.xml";

 

    iBATIS3的注解可以定义在接口方法上的,也可以定义在类方法上,我这里定义在接口上,接口PersonMapper.java代码如下:

package cn.ibatis3.test.annotation;

import java.util.List;

import org.apache.ibatis.annotations.CacheNamespace;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.Update;

@CacheNamespace(readWrite = true)
public interface PersonMapper {
	@Select("select * from person where id = #{id}")
	@Options(useCache = true, flushCache = false)
	Person selectById(Integer id);

	@SelectProvider(type=SqlProvider.class ,method="selectAllSql")
	List<Person> selectAll();

	@Select("select * from person where name like #{name}")
	List<Person> selectPersonsByName(String name);

	@Insert( { "insert into person(name,birthday,sex)",
			"values(#{name},#{birthday},#{sex})" })
	void insert(Person person);

	@Delete("delete from person where id=#{id}")
	void delete(Person person);

	@Update( {"update person set name=#{name},birthday=#{birthday},sex=#{sex}",
			"where id=#{id}" })
	void update(Person person);

}

 上面的注解SelectProvider使用了一个类SqlProvider.java,其代码如下:

package cn.ibatis3.test.annotation;

public class SqlProvider {
	// 动态的SQL语句,实际上应该使用iBATIS的动态SQL产生方法,这里仅仅是为了使用注解
	public String selectAllSql() {
		return "SELECT * FROM person p";
	}
}

 

 接口的实现类PersonDao.java代码如下:

package cn.ibatis3.test.annotation;

import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

public class PersonDao implements PersonMapper {
	private SqlSessionFactory sessionFactory = SessionFactory.getInstance()
			.getSqlSessionFactory();

	public Person selectById(Integer id) {
		Person person = new Person();
		SqlSession session = null;
		try {
			session = sessionFactory.openSession();
			PersonMapper personMapper = session.getMapper(PersonMapper.class);
			person = personMapper.selectById(id);
		} finally {
			session.close();
		}
		return person;
	}

	@SuppressWarnings("unchecked")
	public List<Person> selectAll() {
		List<Person> persons = new ArrayList<Person>();
		SqlSession session = null;
		try {
			session = sessionFactory.openSession();
			PersonMapper personMapper = session.getMapper(PersonMapper.class);
			persons = personMapper.selectAll();
		} finally {
			session.close();
		}

		return persons;
	}

	public void delete(Person person) {
		SqlSession session = null;
		try {
			session = sessionFactory.openSession();
			PersonMapper personMapper = session.getMapper(PersonMapper.class);
			personMapper.delete(person);
			session.commit();
		} finally {
			session.close();
		}

	}

	public void insert(Person person) {
		SqlSession session = null;
		try {
			session = sessionFactory.openSession();
			PersonMapper personMapper = session.getMapper(PersonMapper.class);
			personMapper.insert(person);
			session.commit();
		} finally {
			session.close();
		}

	}

	public void update(Person person) {
		SqlSession session = null;
		try {
			session = sessionFactory.openSession();
			PersonMapper personMapper = session.getMapper(PersonMapper.class);
			personMapper.update(person);
			session.commit();
		} finally {
			session.close();
		}

	}

	@SuppressWarnings("unchecked")
	public List<Person> selectPersonsByName(String name) {
		List<Person> persons = new ArrayList<Person>();
		SqlSession session = null;
		try {
			session = sessionFactory.openSession();
			PersonMapper personMapper = session.getMapper(PersonMapper.class);
			persons=personMapper.selectPersonsByName("%" + name + "%");
		} finally {
			session.close();
		}

		return persons;
	}

}

   

好了,有时间还会继续写相关文章的,谢谢!欢迎大家指出其中的错误或者是不恰当的地方。

  • 大小: 8 KB
9
3
分享到:
评论
6 楼 ynp 2011-03-31  
请问博主 既然已经使用了注解方式,为什么还得写person.xml这个文件呢,能不能在接口上进行个什么注解从而达到不写这个文件的目的呢?(就像hibernate注解一样,用注解就不用写*.hbm.xml)总感觉有点多余似的。
5 楼 lyb520320 2010-06-03  
hanz188 写道
请问博主,能否写个简单的测试类来验证我们的代码编写的是否正确。比如main()方法,该怎么调用上述的接口呢。

谢谢你的关注,直接调用:
PersonMapper personMapper=new PersonDao();
personMapper.selectAll();
4 楼 hanz188 2010-05-07  
请问博主,能否写个简单的测试类来验证我们的代码编写的是否正确。比如main()方法,该怎么调用上述的接口呢。
3 楼 lyb520320 2010-02-05  
lyb520320 写道
	public void insert(Person person) {
		SqlSession session = null;
		try {
			final String id="cn.ibatis3.test.PersonMapper.insertPerson";
			session = sessionFactory.openSession(ExecutorType.REUSE);
			session.insert(id, person);
			final Configuration configuration=session.getConfiguration();
			final MetaObject metaObject=configuration.newMetaObject(person);
			int idKey=Integer.parseInt( metaObject.getValue("id").toString());
			System.out.println(idKey);
			session.commit();
		} finally {
			session.close();
		}

	}

这个是学习(一)里的例子里面的,其实iBATIS3并没有提供直接获得当前插入记录的id的方法,这个是我从源码里查看它是怎么样设置这个自动生成的id,然后再通过它的get方法获得的。
谢谢你的关注!

对了,还要在person.xml里设置
<insert id="insertPerson" useGeneratedKeys="true" keyProperty="id" parameterType="Person">
		insert into person(name,birthday,sex)
		values(#{name},#{birthday},#{sex})
	</insert>

放假了,没时间来更新了
2 楼 lyb520320 2010-02-05  
	public void insert(Person person) {
		SqlSession session = null;
		try {
			final String id="cn.ibatis3.test.PersonMapper.insertPerson";
			session = sessionFactory.openSession(ExecutorType.REUSE);
			session.insert(id, person);
			final Configuration configuration=session.getConfiguration();
			final MetaObject metaObject=configuration.newMetaObject(person);
			int idKey=Integer.parseInt( metaObject.getValue("id").toString());
			System.out.println(idKey);
			session.commit();
		} finally {
			session.close();
		}

	}

这个是学习(一)里的例子里面的,其实iBATIS3并没有提供直接获得当前插入记录的id的方法,这个是我从源码里查看它是怎么样设置这个自动生成的id,然后再通过它的get方法获得的。
谢谢你的关注!
1 楼 liwenso 2010-02-05  
初次接触IBatis,请问一下楼主,我插入一条记录,如何得到该记录的ID,就拿这个Person这个例子

相关推荐

    最新的ibatis 3.0(包含源码)

    6. **注解支持**:除了XML配置,3.0版本还增加了对注解的支持,开发者可以在DAO接口和实体类上直接使用注解来声明SQL和参数映射,简化了配置。 7. **TypeHandler**:Ibatis的TypeHandler机制用于处理Java类型与...

    ibatis3.0+jsp(demo)

    总的来说,"ibatis3.0+jsp(demo)"项目是一个学习和实践Java Web数据库操作的好资源,涵盖了iBATIS的配置、映射、SQL执行,以及JSP的视图展示,对于理解Java Web开发和数据库操作具有很高的参考价值。通过深入研究这...

    ibatis3.0中文文档和英文文档

    Ibatis3.0中文文档和英文文档是学习和理解这个框架的重要资源,它们详尽地阐述了每个知识点,并提供了丰富的示例代码。无论是初学者还是资深开发者,都可以从中受益匪浅,提升数据库操作的效率和质量。

    spring3.0 + ibatis+jquery+注解建立dao、service类

    在Spring 3.0中,可以使用MyBatis-Spring集成库来无缝地将iBatis与Spring结合,使得事务管理和DAO对象的创建变得简单。 **注解** 在本项目中,注解将被用来声明和配置DAO和服务类。例如,`@Repository`用于标记DAO...

    ibatis3.0中in的用法

    它可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 #### 三、`IN`语句的基本用法 在标准的SQL查询中,`IN`语句通常用于匹配一个...

    ibatis-core-3.0.jar.zip

    总结,`ibatis-core-3.0.jar`作为iBatis的核心库,封装了与数据库交互的复杂逻辑,使开发者能够专注于业务逻辑,而非底层的数据库操作。理解并熟练运用这个库,将极大地提升开发效率和代码质量。在实际项目中,结合...

    struts2_spring_ibatis3.0整合

    iBatis是一个轻量级的持久层框架,它将SQL与Java代码分离,通过XML或注解方式配置和映射SQL语句,使数据库操作更易于维护和扩展。iBatis与Spring的结合,可以实现数据访问层的事务管理,提高了代码的可测试性和可...

    Spring3.0+Ibatis+Oracle全注解开发详细过程

    在本文中,我们将深入探讨如何使用Spring 3.0、iBATIS和Oracle数据库进行全注解开发。这种技术栈组合常用于构建企业级Java Web应用程序,以实现灵活的数据访问和松散耦合的架构。 首先,让我们了解Spring 3.0中的...

    ibatis-core-3.0.jar org.apache.ibatis.annotations.Param

    在Java开发领域,MyBatis是一个非常流行的持久层框架,它简化了数据库操作与Java对象之间的映射工作。`ibatis-core-3.0.jar`是MyBatis的核心库文件,包含了MyBatis框架的主要功能。`org.apache.ibatis.annotations....

    spring3.0+ibatis 集成实例

    iBatis 的设计目标是使数据库操作变得简单,并且能够将SQL语句直接写在配置文件中,便于维护和调整。 集成Spring 3.0和iBatis的过程通常包括以下步骤: 1. **配置数据源**:在Spring的配置文件中,你需要定义数据...

    ibatis jar文件

    4. ibatis-dao-2:可能是指iBATIS Data Access Object (DAO)的第二个版本,DAO是一种设计模式,用于封装数据库操作,使得业务逻辑与数据访问层解耦。 5. ibatis-sqlmap-2:iBATIS SQLMap是它的SQL映射组件,负责将...

    ibatis-3是一个很不错的持久层框架

    3. **简单易用的API**:Ibatis 提供了一个简单但功能丰富的API,用于执行数据库操作,如插入、更新、删除和查询。这些操作可以通过SqlSession对象进行,大大降低了学习成本。 4. **事务管理**:Ibatis 提供了对事务...

    ibatis jar

    iBATIS的核心在于它的SQL Maps,这是一种XML或者注解形式的配置文件,用于定义数据库操作与Java对象之间的映射关系。开发者可以直接编写SQL语句,这相比Hibernate的HQL(Hibernate Query Language)或Criteria API...

    ibatis最新

    Ibatis作为一个轻量级的ORM(Object-Relational Mapping)框架,它的设计目标是简化Java应用与数据库的交互,通过XML或注解的方式将SQL与Java代码分离,提供动态SQL的支持,使得开发人员可以在不修改大量代码的情况...

    spring3.0jar包

    `@Transactional` 注解可以方便地声明事务边界,而`@Repository` 注解配合Spring的数据访问异常转换机制,使得数据库操作的错误处理更加优雅。 Spring 3.0 还强化了消息支持,增加了对JMS(Java Message Service)...

    ibatis-2.3.3.720.jar

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责简化数据库操作,使得开发者能够将注意力集中在编写SQL语句上,而无需关注底层的JDBC代码。Ibatis 2.3.3.720.jar是该框架的一个特定版本,包含了...

    ibatis开发jar包

    Ibatis 是一个优秀的轻量级Java持久层框架,它提供了SQL映射功能,将复杂的数据库操作与业务逻辑相分离,从而降低了系统的耦合度。这个压缩包“ibatis-core-3.0”很可能是Ibatis的3.0版本的核心库,包含了实现Ibatis...

    Spring 3.0 整合 iBatis 3 Beta10 配置

    在Spring 3.0中整合iBatis 3 Beta10是一个相对复杂的过程,因为官方文档并未明确提及对iBatis 3的支持。不过,通过一些自定义配置和理解两个框架的基本原理,开发者可以实现这样的整合。下面我们将详细介绍如何进行...

    ibatis用xml配置文件配置使用

    在IT行业中,iBATIS(现为MyBatis)是一个非常流行的数据访问框架,它将SQL语句与Java代码分离,使得数据库操作更加简洁、灵活。本篇文章将深入探讨如何使用XML配置文件来配置iBATIS,以解决你在实际开发中可能遇到...

Global site tag (gtag.js) - Google Analytics