mybatis应用实例学习

时间:2021-10-15 14:38:41

MyBatis下载地址: http://code.google.com/p/mybatis/

搭建第一个mybatis应用
创建系统所需数据库

-- --数据库 tb_user -- 
drop table if exists tb_user; create table tb_user( id int primary key auto_increment comment '主键', username varchar(40) not null unique comment '用户名', password varchar(40) not null comment '密码', email varchar(40) comment '邮件', age int  comment '年龄', sex char(2) not null comment '性别' );

项目结构图:
mybatis应用实例学习

实体类User

package com.icreate.entity; /** * * * @version : 1.0 * * @author : 苏若年 <a href="mailto:DennisIT@163.com">发送邮件</a> * * @since : 1.0 创建时间: 2013-4-9 上午11:15:50 * * @function: TODO * */
public class User { private int id; private String username; private String password; private String sex; private String email; private int age; //getter and setter 
}

 

方案一: 基于配置文件
数据dao接口

package com.icreate.dao; import java.util.List; import com.icreate.entity.User; /** * * * @version : 1.0 * * @author : 苏若年 <a href="mailto:DennisIT@163.com">发送邮件</a> * * @since : 1.0 创建时间: 2013-4-9 上午11:36:34 * * @function: TODO * */
public interface UserDao { /** * 新增用户 * @param user * @return
      */
     public int insert(User user); /** * 修改用户 * @param user * @return
      */
     public int update(User user); /** * 删除用户 * @param userName * @return
      */
     public int delete(String userName); /** * 查询所有用户 * @return
      */
     public List<User> selectAll(); /** * 查询数据库中总记录条数 * @return
      */
     public int countAll(); /** * 根据用户名查询用户 * @param userName * @return
      */
     public User findByUserName(String userName); }

UserDaoMapper.xml文件

<?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="com.icreate.dao.UserDao">
    <select id="countAll" resultType="int">  <!-- 查询表中记录总数 -->
        select count(*) c from tb_user;
    </select>
    
    <select id="selectAll" resultType="com.icreate.entity.User">    <!-- 查询表中的所有用户 -->
        select * from tb_user order by username asc
    </select>
    
    <insert id="insert" parameterType="com.icreate.entity.User">    <!-- 向数据库中插入用户 -->
        insert into tb_user(username,password,email,sex,age) values(#{username},#{password},#{email},#{sex},#{age})
    </insert>
    
    <update id="update" parameterType="com.icreate.entity.User">     <!-- 更新库中的用户 -->
        update tb_user set username=#{username},password=#{password},email=#{email},sex=#{sex},age=#{age} where username=#{username}
    </update>
    
    <delete id="delete" parameterType="String">    <!-- 删除用户 -->
        delete from tb_user where username=#{username}
    </delete>
    
    <select id="findByUserName" parameterType="String" resultType="com.icreate.entity.User"> <!-- 根据用户名查找用户 -->
        select * from tb_user where username=#{username}
    </select>
</mapper>

 

需要注意的是,这里的id应该与UserDao中定义的方法名相同,sql语句结尾不能用分号
MyBatis-Configuration.xml文件

主测试类

package com.icreate.test; import java.io.Reader; 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 sun.security.krb5.internal.UDPClient; import com.icreate.dao.UserDao; import com.icreate.entity.User; /** * * * @version : 1.0 * * @author : 苏若年 <a href="mailto:DennisIT@163.com">发送邮件</a> * * @since : 1.0 创建时间: 2013-4-9 上午11:58:03 * * @function: TODO * */
public class MybatisHandler { public static void main(String[] args) throws Exception { String resource = "MyBatis-Configuration.xml";    //mybatis配置文件的路径
        Reader reader = Resources.getResourceAsReader(resource); SqlSessionFactoryBuilder builfer = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builfer.build(reader); SqlSession session = factory.openSession(); UserDao userDao = session.getMapper(UserDao.class); //创建对象
        User user = new User(); user.setUsername("苏若年"); user.setPassword("dennisit"); user.setEmail("dennisit@163.com"); user.setSex("男"); user.setAge(80); //增加用户 //userDao.insert(user); //查询数据库中记录总数
        System.out.println("数据库中的记录数:" + userDao.countAll()); //根据用户名查找
        User usn = userDao.findByUserName("苏若年"); if(null!=usn){ System.out.println("根据用户名查找的信息[" +usn.getId() + "," + usn.getUsername() + "," + usn.getEmail()+"]"); } //更新用户
        User updUser = new User(); updUser.setUsername("苏若年"); //更新用户是按照用户名查找,然后更新的.所以要修改的数据前后必须是同一个用户名
        updUser.setEmail("update@163.com"); updUser.setPassword("update"); updUser.setAge(20); userDao.update(updUser); //执行更新操作 //查询所有用户记录
        List<User> list = userDao.selectAll(); for(int i=0;i<list.size();i++){ User us = list.get(i); System.out.println("[" + us.getId() + "," + us.getUsername() + "," + us.getEmail()+"]"); } userDao.delete("苏若年"); System.out.println("执行删除后数据库中的记录数:" + userDao.countAll()); session.commit(); } }

 

程序运行结果

数据库中的记录数:1 根据用户名查找的信息[1,苏若年,dennisit@163.com] [1,苏若年,update@163.com] 执行删除后数据库中的记录数:0

 

参考文档: http://www.cnblogs.com/wushiqi54719880/archive/2011/07/26/2117601.html

 

方案二:基于Annotation

数据表与实体类不变,项目结构图
mybatis应用实例学习

UserDao中使用Annotation

package com.icreate.dao; import java.util.List; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import com.icreate.entity.User; /** * * * @version : 1.0 * * @author : 苏若年 <a href="mailto:DennisIT@163.com">发送邮件</a> * * @since : 1.0 创建时间: 2013-4-9 上午11:36:34 * * @function: TODO * */
public interface UserDao { @Insert("insert into tb_user(username,password,email,sex,age) values(#{username},#{password},#{email},#{sex},#{age})") public int insert(User user); @Update("update tb_user set username=#{username},password=#{password},email=#{email},sex=#{sex},age=#{age} where username=#{username}") public int update(User user); @Delete("delete from tb_user where username=#{username}") public int delete(String userName); @Select("select * from tb_user ") public List<User> selectAll(); @Select("select count(*) from tb_user") public int countAll(); @Select("select * from tb_user where username=#{username}") public User findByUserName(String userName); }

MyBatis-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">
<configuration>
    <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:3306/db_mybatis?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
</configuration>

DBHelper辅助类 

package com.icreate.util; import java.io.IOException; import java.io.Reader; 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.icreate.dao.UserDao; /** * * * @version : 1.0 * * @author : 苏若年 <a href="mailto:DennisIT@163.com">发送邮件</a> * * @since : 1.0 创建时间: 2013-4-9 下午02:36:43 * * @function: 单例设计模式 * */
public class DBHelper { private static DBHelper dbHelper = new DBHelper(); private  SqlSessionFactory sqlSessionFactory = null; private DBHelper(){ try { String resource = "MyBatis-Configuration.xml";    //mybatis配置文件的路径
            Reader reader = Resources.getResourceAsReader(resource); SqlSessionFactoryBuilder builfer = new SqlSessionFactoryBuilder(); sqlSessionFactory = builfer.build(reader); sqlSessionFactory.getConfiguration().addMapper(UserDao.class); } catch (IOException e) { e.printStackTrace(); } } public static DBHelper getInstance(){ return dbHelper; } public SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }

数据操作模拟类

package com.icreate.test; import java.io.Reader; 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 sun.security.krb5.internal.UDPClient; import com.icreate.dao.UserDao; import com.icreate.entity.User; import com.icreate.util.DBHelper; /** * * * @version : 1.0 * * @author : 苏若年 <a href="mailto:DennisIT@163.com">发送邮件</a> * * @since : 1.0 创建时间: 2013-4-9 上午11:58:03 * * @function: TODO * */
public class MybatisHandler { public static void main(String[] args) throws Exception { SqlSession session = DBHelper.getInstance().getSqlSession(); UserDao userDao = session.getMapper(UserDao.class); //创建对象
        User user = new User(); user.setUsername("苏若年"); user.setPassword("dennisit"); user.setEmail("dennisit@163.com"); user.setSex("男"); user.setAge(80); //增加用户
 userDao.insert(user); //查询数据库中记录总数
        System.out.println("数据库中的记录数:" + userDao.countAll()); //根据用户名查找
        User usn = userDao.findByUserName("苏若年"); if(null!=usn){ System.out.println("根据用户名查找的信息[" +usn.getId() + "," + usn.getUsername() + "," + usn.getEmail()+"]"); } //更新用户
        User updUser = new User(); updUser.setUsername("苏若年"); //更新用户是按照用户名查找,然后更新的.所以要修改的数据前后必须是同一个用户名
        updUser.setEmail("update@163.com"); updUser.setPassword("update"); updUser.setAge(20); updUser.setSex("男"); userDao.update(updUser); //执行更新操作 //查询所有用户记录
        List<User> list = userDao.selectAll(); for(int i=0;i<list.size();i++){ User us = list.get(i); System.out.println("[" + us.getId() + "," + us.getUsername() + "," + us.getEmail()+"]"); } userDao.delete("苏若年"); System.out.println("执行删除后数据库中的记录数:" + userDao.countAll()); session.commit(); } }

程序运行结果 

数据库中的记录数:1 根据用户名查找的信息[2,苏若年,dennisit@163.com] [2,苏若年,update@163.com] 执行删除后数据库中的记录数:0

 
参考文档: http://www.cnblogs.com/wushiqi54719880/archive/2011/07/26/2117614.html

在此感谢博友红枫落叶,笔者新接触mybatis,学习时得到落叶文章很大的帮助!

转载请注明出处:[http://www.cnblogs.com/dennisit/archive/2013/04/09/3010801.html]