mybatis实例讲解
1 建一个web工程或java工程,如果要整合spring,则建一个web工程,加入mybatis-3.1.1.jar 2 在src中创建一个xml文件,可以放在src目录中,也可以放在一个包中,这里放在一个包com.ibatistest.maps中,xml文件名为configuration.xml,可以自定义,任意命名 内容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!-- 全局配置文件,要引入命名空间,此文件就相当于hibernate的hibernate-cfg.xml, --> <configuration> <!-- 连接数据库的配置, 注意这里的键: 默认的环境 ID(比如:default=”development”)。 每个 environment元素定义的环境 ID(比如:id=”development”)。 事务管理器的配置(比如:type=”JDBC”)。 数据源的配置(比如:type=”POOLED”) 可以配多个environment,由default来指定用哪一个连接(environment), --> <environments default="development"> <environment id="development"> <!-- 事务配置,具体的事务管理器, 在 MyBatis 中有两种事务管理器类型(也就是 type=”[JDBC | MANAGED]”): JDBC – 这个配置直接简单使用了 JDBC 的提交和回滚设置。 它依赖于从数据源得 到的连接来管理事务范围。 MANAGED –这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让 容器来管理事务的整个生命周期(比如 Spring 或 JEE 应用服务器的上下文) 默认 情况下它会关闭连接。 然而一些容器并不希望这样, 因此如果你需要从连接中停止 它,将 closeConnection 属性设置为 false。 这两种事务管理器都不需要任何属性。然而它们都是类型别名,要替换使用它们, 你需 要放置将你自己的类的完全限定名或类型别名,它们引用了你对 TransactionFactory 接口的实现 类。 --> <transactionManager type="JDBC"></transactionManager> <!-- 连接数据库的具体属性 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://127.0.0.1:3306/crm_test?characterEncoding=utf-8" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> <!-- 连接数据库的配置 --> <mappers> <mapper resource="com/mybatis/pojo/user.xml" /> </mappers> </configuration>
3 建相应的pojo、映射文件、表,映射文件的内容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="userMapper"> <!-- 根据id来查询一个用户 ,id="findUserBuId"是dao中要用到的key,parameterType="int" 调用时传递的参数,resultType="com.mybatis.pojo.User"返回的结果类型,sql中的参数要用#{id},id在此可以任意命名 --> <select id="findUserBuId" parameterType="int" resultType="com.mybatis.pojo.User"> select * from tb_user where user_id=#{id} </select> <!-- 查询所有用户 --> <select id="findAllUser" resultType="com.mybatis.pojo.User"> select * from tb_user </select> <!-- 添加用户, parameterType="com.mybatis.pojo.User"调用时传递的参数类型, sql中的#{loginName},#{password},#{name},必须是#{}格式, 而且loginName为com.mybatis.pojo.User类的一个属性,代码要提交事务 --> <insert id="addUser" parameterType="com.mybatis.pojo.User"> insert into tb_user(LOGIN_NAME,PASSWORD,NAME) values(#{loginName},#{password},#{name}) </insert> <!-- 删除用户,sql中的#{userId},必须是#{}格式,而且loginName为com.mybatis.pojo.User类的一个属性,代码要提交事务 --> <delete id="deleteUserById" parameterType="int"> <![CDATA[ delete from tb_user where user_id=#{userId} ]]> </delete> <!-- 修改用户 #username#必须是user对象的属性,代码要提交事务, 更新时不用查询一个用户,直接设置用户对象的userId属性--> <update id="aa" parameterType="com.mybatis.pojo.User"> update tb_user set login_name=#{loginName} where user_id=#{userId} </update> </mapper>
Dao: public class UserDao { private final String resourse = "com/myibatis/xml/configuration.xml"; private SqlSession sqlSession; public UserDao() { Reader reader; try { reader = Resources.getResourceAsReader(resourse); SqlSessionFactory sqlSessionFacroty = new SqlSessionFactoryBuilder() .build(reader); sqlSession = sqlSessionFacroty.openSession(); } catch (IOException e) { e.printStackTrace(); } } public User findUserById(Integer id) { User user = sqlSession.selectOne("userMapper.findUserBuId", id); sqlSession.close(); return user; } public List<User> findAllUser() { List<User> users = sqlSession.selectList("userMapper.findAllUser"); System.out.println(users.size()); sqlSession.close(); return users; } sqlSession.close(); return users; } public void addUser(User user) { sqlSession.insert("addUser", user); sqlSession.commit(); sqlSession.close(); } public void updateUser(User user) { sqlSession.update("userMapper.aa", user); sqlSession.commit(); sqlSession.close(); } public void deleteUserByid(Integer id) { sqlSession.delete("userMapper.deleteUserById", id); sqlSession.commit(); sqlSession.close(); } }
4 测试
public static void main(String[] args) { UserDao userDao = new UserDao(); User user=new User(); user.setUserId(9); user.setLoginName("aa"); userDao.updateUser(user); }
5 ibatis spring整合 5.1 为web工程添加spring组件 5.2 在web.xml添加spring的启动 5.3 在applicationContext.xml中加数据源和注入,内容:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!--此bean告诉Spring去哪找数据库的配置信息,因为有此Bean才出现下面用${}标记来取变量的语句--> <bean id="propertyConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"> <!-- 属性文件如果是放在某个包下,则在这里读取时,要加上classpath: à <value>classpath:com/ibatistest/maps/dbcpconfig.properties</value> </property> </bean> <!--配置一个数据源,根据上面propertyConfig指定的location去找数据库连接的配置信息--> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>${driverName}</value> </property> <property name="url"> <value>${url}</value> </property> <property name="username"> <value>${username}</value> </property> <property name="password"> <value>${password}</value> </property> </bean> <!--根据dataSource和configLocation创建一个SqlMapClient--> <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation"> <!-- xml文件如果是放在某个包下,则在这里读取时,要加上classpath: à<value>classpath:com/ibatistest/maps/sql_map_config2.xml</value> </property> <property name="dataSource"> <ref bean="dataSource" /> </property> </bean> <!--根据sqlMapClien创建一个SqlMapClient模版类--> <bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate"> <property name="sqlMapClient"> <ref bean="sqlMapClient" /> </property> </bean> <!--将上面的模版类织入到我们的DAO对象中--> <bean id="userDao" class="com.ibatistest.dao.UserDao"> <property name="sqlMapClientTemplate"> <ref bean="sqlMapClientTemplate" /> </property> </bean> </beans>
5.4 创建com.ibatistest.dao.UserDao,内容:
package com.ibatistest.dao; import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; import org.springframework.orm.ibatis.SqlMapClientTemplate; import com.ibatistest.pojo.User; public class UserDao { private SqlMapClientTemplate sqlMapClientTemplate; public static void main(String[] args) { ApplicationContext factory = new FileSystemXmlApplicationContext( "WebRoot/WEB-INF/applicationContext.xml"); UserDao userDao = (UserDao) factory.getBean("userDao"); // userDao.findUserByUsername("sa"); // User addUser = new User("ibatis spring add", "33333", "1"); // userDao.addUser(addUser); userDao.deleteUserByid(31); userDao.findAllUser(); } private User findUserByUsername(String username) { // 查询,getUser是对应映射文件的id,username为传入参数 User user = (User) sqlMapClientTemplate.queryForObject("getUser", username); System.out.println(user.getUsername() + ">>>>" + user.getId()); return user; } private void addUser(User user) { sqlMapClientTemplate.insert("addUser", user); } private void findAllUser() { List<User> allUsers = (List<User>) sqlMapClientTemplate .queryForList("findAllUser"); for (User user : allUsers) { System.out.println(user.getUsername() + ">>>>" + user.getId()); } } private void updateUser(User user) { sqlMapClientTemplate.update("updateUserById", user); } private void deleteUserByid(Integer id) { sqlMapClientTemplate.delete("deleteUserById", id); } public SqlMapClientTemplate getSqlMapClientTemplate() { return sqlMapClientTemplate; } public void setSqlMapClientTemplate( SqlMapClientTemplate sqlMapClientTemplate) { this.sqlMapClientTemplate = sqlMapClientTemplate; } }
身世酒杯中,万事皆空。
古来三五个英雄。
雨打风吹何处是,汉殿秦宫。
梦入少年丛,歌舞匆匆。
老僧夜半误鸣钟。
惊起西窗眠不得,卷地西风。