ibatis之HelloWorld项目,很多时候我们只需要一个HelloWorld
2011-12-06 20:05
671 查看
所有文档资料均可在此下载:http://download.csdn.net/detail/tsyj810883979/3887793
资源中包含很多比较好的,我入门的文档,ibatis2.x的jar包,ibatis源码等。还有一个本文说的HelloWord项目。
由于提供的文档中几乎都有你想要的资料,所以本文中只是一个小小的HelloWorld项目,完整代码在资源中。
很多时候其实我们只是需要一个HelloWorld,从次开始不断深入学习即可。
首先创建数据库以及两个数据表:
新建java项目-》导入ibatis包(项目截图)
上面是完整的项目结构图。
第一步:新建一个java project,导入数据库连接包,日志相关包,以及Ibatis包。
第二步:写实体类,用eclipse生成方法即可。
第三步:写sqlMapConfig(对应项目中的sql_map_mysql.xml文件)
例如SQLMapBaseDAO.java
资源中包含很多比较好的,我入门的文档,ibatis2.x的jar包,ibatis源码等。还有一个本文说的HelloWord项目。
由于提供的文档中几乎都有你想要的资料,所以本文中只是一个小小的HelloWorld项目,完整代码在资源中。
很多时候其实我们只是需要一个HelloWorld,从次开始不断深入学习即可。
首先创建数据库以及两个数据表:
CREATE database db_study CHARACTER SET UTF-8; CREATE TABLE `t_address` ( `id` int(11) NOT NULL, `uid` int(11) DEFAULT NULL, `province` varchar(10) DEFAULT NULL, `postcode` varchar(10) DEFAULT NULL, PRIMARY KEY (`id`) ) CREATE TABLE `t_user` ( `id` int(11) NOT NULL, `name` varchar(10) DEFAULT NULL, `sex` varchar(10) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) )
新建java项目-》导入ibatis包(项目截图)
上面是完整的项目结构图。
第一步:新建一个java project,导入数据库连接包,日志相关包,以及Ibatis包。
第二步:写实体类,用eclipse生成方法即可。
第三步:写sqlMapConfig(对应项目中的sql_map_mysql.xml文件)
<?xml version="1.0" encoding="GB2312"?> <!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <!-- 基本设置 --> <settings cacheModelsEnabled="false" enhancementEnabled="false" lazyLoadingEnabled="false" maxRequests="300" maxSessions="300" maxTransactions="300" useStatementNamespaces="false"/> <!-- 数据访问相关配置 --> <transactionManager type="JDBC"> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="com.mysql.jdbc.Driver" /> <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/db_study?useUnicode=true&characterEncoding=UTF-8" /> <property name="JDBC.Username" value="root" /> <property name="JDBC.Password" value="tmall" /> </dataSource> </transactionManager> <sqlMap resource="sqlmap/address_mapping.xml"/> <sqlMap resource="sqlmap/user_mapping.xml"/> </sqlMapConfig>第四步:定义接口,定义可以预期的可能要用到的方法(比如UserDAO)
package study.ibatis.dao; import java.util.List; import study.ibatis.entity.User; public interface UserDAO { //增加当前用户 void insertUser(User user); //删除指定用户 void deleteByUserId(int id); //删除当前用户 void deleteUser(User user); //更新当前用户 void updateUser(User user); //查询指定用户 User queryByUserId(int id); //查询所有用户 List<User> query(); //查询部分用户 List<User> queryForPage(int start, int end); //模糊查询用户群 List<User> search(User user); }第五步:针对接口定义sqlMap,例(user_mapping.xml)
<?xml version="1.0" encoding="GB2312" ?> <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMap> <!--模块配置 --> <typeAlias alias="User" type="study.ibatis.entity.User" /> <typeAlias alias="GenderTypeHandler" type="study.ibatis.handler.GenderTypeHandler" /> <resultMap id="user" class="User"> <result column="id" property="id"/> <result column="name" property="name" nullValue="unknown"/> <result column="sex" property="sex" typeHandler="GenderTypeHandler"/> <result column="age" property="age" nullValue="0"/> </resultMap> <sql id="user.all"> id, name, sex, age </sql> <!-- Statement配置--> <!-- 增加一条记录 --> <insert id="Ibatis.insertUser" parameterClass="User"> <![CDATA[ insert into t_user(id, name, sex, age) values(#id#, #name#, #sex,handler=GenderTypeHandler#, #age#) ]]> </insert> <!-- 更新一条数据 --> <update id="Ibatis.updateUser" parameterClass="User"> UPDATE t_user SET name=#name#, sex=#sex,handler=GenderTypeHandler#, age=#age# WHERE id = #id# </update> <!-- 查询一条数据记录 --> <select id="Ibatis.queryByUserId" parameterClass="java.lang.Integer" resultMap="user"> select <include refid="user.all" /> from t_user where id=#id# </select> <!-- 查询所有数据 --> <select id="Ibatis.queryAll" resultMap="user"> select <include refid="user.all" /> from t_user </select> <!-- 删除指定的用户 --> <delete id="Ibatis.deleteByUserId" parameterClass="java.lang.Integer"> delete from t_user where id=#id# </delete> <!-- 删除当前的用户 --> <delete id="Ibatis.deleteUser" parameterClass="user"> delete from t_user where id=#id# </delete> <!-- 用于分页查询 --> <select id="Ibatis.queryForPage" parameterClass="java.util.Map" resultMap="user"> <![CDATA[ select id, name, sex, age from t_user limit #start#, #end# ]]> </select> <!-- 动态模糊查询 --> <select id="Ibatis.search" parameterClass="User" resultMap="user"> select <include refid="user.all" /> from t_user <dynamic prepend="where"> <isNotEmpty prepend="and" property="name"> (name like '%$name$%') </isNotEmpty> <isNotNull prepend="and" property="sex"> (sex = #sex,handler=GenderTypeHandler#) </isNotNull> <isNotEmpty prepend="and" property="age"> (age = #age#) </isNotEmpty> </dynamic> </select> </sqlMap>第六步:定义通用底层类及接口实现类
例如SQLMapBaseDAO.java
package study.ibatis.dao.impl; import java.io.IOException; import java.io.Reader; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; public class SqlMapBaseDAO { protected static SqlMapClient sqlMap; protected static Logger logger; static { sqlMap = SqlMapBaseDAO.getSqlMapClient(); logger = SqlMapBaseDAO.getLogger(); } private static SqlMapClient getSqlMapClient() { String resource = "sql_map_mysql.xml"; Reader reader; try { reader = Resources.getResourceAsReader(resource); sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); } catch (IOException e) { sqlMap = null; e.printStackTrace(); } return sqlMap; } protected static Logger getLogger() { logger = LogManager.getLogger("study.ibatis.dao"); return logger; } }IbatisUserDAO.java
package study.ibatis.dao.impl; import java.security.InvalidParameterException; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import study.ibatis.dao.UserDAO; import study.ibatis.entity.User; public class IbatisUserDAO extends SqlMapBaseDAO implements UserDAO{ //向user表中增加一条记录 @Override public void insertUser(User user) { try { sqlMap.insert("Ibatis.insertUser", user); } catch (SQLException e) { e.printStackTrace(); logger.error("插入数据时出现错误"+e.getMessage()); } } //更新当前记录的信息 @Override public void updateUser(User user) { try { //默认将自动提交事务 sqlMap.startTransaction(); sqlMap.update("Ibatis.updateUser", user); sqlMap.commitTransaction(); } catch (SQLException e) { logger.error("更新数据时出现错误"+e.getMessage()); } } //查询指定用户的信息 @Override public User queryByUserId(int id) { User user = new User(); try { user = (User)sqlMap.queryForObject("Ibatis.queryByUserId", id); } catch (SQLException e) { System.out.println("123"); e.printStackTrace(); logger.error("查询数据时出现错误"+e.getMessage()); } return user; } //查询表中所有记录 @SuppressWarnings("unchecked") @Override public List<User> query() { List<User> lsUser = new ArrayList<User>(); try { lsUser = sqlMap.queryForList("Ibatis.queryAll"); } catch (SQLException e) { logger.error("查询数据时出现错误"+e.getMessage()); } return lsUser; } //分页查询使用 @SuppressWarnings("unchecked") @Override public List<User> queryForPage(int start, int end) { if(end<=start || start<0) { throw new InvalidParameterException("输入参数不合法"); } List<User> lsUser = new ArrayList<User>(); Map<String, Integer> map = new HashMap<String, Integer>(); map.put("start", start); map.put("end", end); try { lsUser = (List<User>)sqlMap.queryForList("Ibatis.queryForPage", map); } catch (SQLException e) { logger.error("查询数据时出现错误"+e.getMessage()); } return lsUser; } //删除指定的一条用户记录 @Override public void deleteByUserId(int id) { try { sqlMap.delete("Ibatis.deleteByUserId", id); } catch (SQLException e) { logger.error("删除数据时出现错误"+e.getMessage()); e.printStackTrace(); } } //删除特定的用户 @Override public void deleteUser(User user) { try { sqlMap.delete("Ibatis.deleteUser", user); } catch (SQLException e) { logger.error("删除数据时出现错误"+e.getMessage()); e.printStackTrace(); } } //用于模糊查询 @SuppressWarnings("unchecked") @Override public List<User> search(User user) { List<User> users = null; try { users = sqlMap.queryForList("Ibatis.search", user); } catch (SQLException e) { logger.error("查询数据时出现错误"+e.getMessage()); e.printStackTrace(); } return users; } }第七步:测试自己实现的方法,最后做一个小结。
相关文章推荐
- 有的时候我们需要用一个颜色值生成一张按钮的背景色,下面的方法就很有用了
- 一般来说我们总会在设置Block之后,在合适的时间回调Block,而不希望回调Block的时候Block已经被释放了,所以我们需要对Block进行copy,copy到堆中,以便后用。 当一个Bloc
- Vue如何使用vue-area-linkage实现地址三级联动效果 很多时候我们需要使用地址三级联动,即省市区三级联动。网上有很多插件,在此介绍Vue的一款地区联动插件:vue-ar
- 很多时候的心情,是需要一个无人的角落
- 设计一个界面动效的时候,我们需要考虑什么?
- 项目管理:为什么我们需要一个需求文档
- 在进行C#编程时候,有的时候我们需要判断一个字符串是否是数字字符串,我们可以通过以下两种方法来实现。 【方法一】:使用 try{} catch{} 语句。 我们可以在try语句块中试图
- python默认的是17位小数的精度,但是这里有一个问题,就是当我们的计算需要使用更高的精度(超过17位小数)的时候该怎么做呢?
- Eclipse从SVN检出maven项目后的一些配置 Eclipse从SVN检出maven项目后,会发现它只是一个普通的java project,如图: 这里我们需要把它转成maven-weba
- 很多时候我们都是缺少一个好的切入点(转)
- laravel从git上拉取下来一个新的项目的时候,需要注意的
- 在开发iOS程序时,有时候需要将时间格式调整成自己希望的格式,这个时候我们可以用NSDateFormatter类来处理。 例如: //实例化一个NSDateFormatter对象 NSDateFor
- 当我们copy一个web项目的时候,此时要修改其Context root
- 你知道的,javascript语言的执行环境是"单线程模式",这种模式的好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行,因此很多时候需要进行“异步模式”,请列举js异步编程的方法。
- 很多时候我们所需要的是目标
- android中很多情况下我们需要会使用多个fragment,我们这时就需要一个showFragment来实现fragment之间的切换
- Python 最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表。 实现方式: 通过goog
- 在事件触发的时候,有时我们需要一些模拟用户行为的操作。例如:当网页加载完毕后 自行点击一个按钮触发一个事件,而不是用户去点击。
- 做一个好的程序员,我们需要做很多很多
- 第九题:【数据结构】【微软面试题】假设我们有一个队列 我们需要快速的找到里面存储的最大值 该怎么做?