zoukankan      html  css  js  c++  java
  • Mybatis案例

    MyBatis

    MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。 MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO( Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录.

    mybatis提供一种“半自动化”的ORM实现。
       这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”ORM实现而言,“全自动”ORM实现了POJO和数据库表之间的映射,以及 SQL 的自动生成和执行。

        而mybatis的着力点,则在于POJO与SQL之间的映射关系。

    需要的jar包:

    mybatis需要jar包:mybatis-3.3.0.jar

    mysql驱动jar包:mysql-connector-java-5.1.15.-bin.jar

    日志记录jar包:log4j.jar

     User.java

    package com.kangjie.bean;
    
    import java.util.Date;
    
    public class User {
    
        private String id;
        private String name;
        private String gender;
        private Date birthday;
        private String cellphone;
        private String email;
        private String hobby;
        private String type;
        private String description;
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getGender() {
            return gender;
        }
        public void setGender(String gender) {
            this.gender = gender;
        }
        public Date getBirthday() {
            return birthday;
        }
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
        public String getCellphone() {
            return cellphone;
        }
        public void setCellphone(String cellphone) {
            this.cellphone = cellphone;
        }
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
        public String getHobby() {
            return hobby;
        }
        public void setHobby(String hobby) {
            this.hobby = hobby;
        }
        public String getType() {
            return type;
        }
        public void setType(String type) {
            this.type = type;
        }
        public String getDescription() {
            return description;
        }
        public void setDescription(String description) {
            this.description = description;
        } 
    }

    创建方法接口UserMapper.java和定义操作user表的sql映射文件UserMapper.xml

    package com.kangjie.mapper;
    
    import java.util.List;
    
    import com.kangjie.bean.User;
    
    public interface UserMapper {
    
        /**
         * 
         * @param user
         * @return
         * @throws Exception
         */
        public int addUser(User user) throws Exception;
        
        public int updateUser(User user) throws Exception;
        
        public int deleteUser(String id) throws Exception;
        public int findUserByID(String id) throws Exception;
        public List<User> getAllUser() throws Exception;
    }

     UserMapper.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.kangjie.mapper.UserMapper">
    <!-- 自定义结果返回集 -->
        <resultMap type="User" id="userMap">
            <id property="id" column="id" javaType="java.lang.String"></id>
            <result property="name" column="name" javaType="java.lang.String"></result>
            <result property="gender" column="gender" javaType="java.lang.String"></result>
            <result property="birthday" column="birthday" javaType="java.util.Date"></result>
            <result property="cellphone" column="cellphone" javaType="java.lang.String"></result>
            <result property="email" column="email" javaType="java.lang.String"></result>
            <result property="hobby" column="hobby" javaType="java.lang.String"></result>
            <result property="type" column="type" javaType="java.lang.String"></result>
            <result property="description" column="description" javaType="java.lang.String"></result>
        </resultMap>
    <!-- 标签中的id属性必须和接口中的方法名相同,id必须唯一 -->
    <!-- keyProperty:仅对insert有效,MyBatis通过getGeneratedKeys或者通过insert语句的selectKey 子元素设置它的值 -->
        <insert id="addUser" useGeneratedKeys="true" keyProperty="id">
            insert into teacher (id,name,gender,birthday,cellphone,email,hobby,type,description) values (#{id},#{name},#{gender},#{birthday},#{cellphone},#{email},#{hobby},#{type},#{description})
        </insert>
    
    </mapper>

    为mybatis.cfg.xml里注册UserMapper.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>
    <!-- 引入外部配置文件 -->
    <properties resource="dbcfg.properties"></properties>
    <!-- 为Java Bean起别名-->
    <typeAliases>
        <typeAlias type="com.kangjie.bean.User" alias="User"/>
    </typeAliases>
    
    <!-- 配置mybatis运行环境 -->
    <environments default="cybatis">
    
    <environment id="cybatis">
    <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
    <transactionManager type="JDBC" />
    <!-- mybatis提供了3种数据源类型,分别是POOLED,UNPOOL,JNDI -->
    <!-- POOLED 表示支持JDBC数据源连接池 -->
    <!-- UNPOOLED 表示不支持数据源连接池 -->
    <!-- JNDI 表示支持外部数据源连接池 -->
    <dataSource type="POOLED">
    <property name="driver" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
    </dataSource>
    <!-- </transactionManager> -->
    </environment>
    </environments>
    
    <mappers>
    <!-- 告知映射文件方式 -->
        <!-- <package name="com/kangjie/mapper/UserMapper.xml"/> -->
        <mapper resource="com/kangjie/mapper/UserMapper.xml"/>
    </mappers>
    </configuration>

    创建工具类

    package com.kangjie.tools;
    
    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;
    
    public class DBTools {
    
        public static SqlSessionFactory sessionFactory;
        static{
            try {
                //使用MyBatis提供的Resource类加载mybaits的配置文件
    //            Reader reader = Resources.getResourceAsReader("/MyBatis/src/mybatis.cfg.xml");
                Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
                //构建sqlsession工厂
                sessionFactory = new SqlSessionFactoryBuilder().build(reader);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        //创建能执行映射文件中的sql的sqlSession
        public static SqlSession getSession(){
            return sessionFactory.openSession();
        }
    }

    测试插入数据

    package com.kangjie.service;
    
    import java.util.Date;
    
    import org.apache.ibatis.session.SqlSession;
    
    import com.kangjie.bean.User;
    import com.kangjie.mapper.UserMapper;
    import com.kangjie.tools.DBTools;
    
    public class UserService {
    
        public static void main(String[] args) {
            addUser();
        }
    
        private static void addUser() {
            // TODO Auto-generated method stub
            SqlSession session = DBTools.getSession();
            UserMapper mapper = session.getMapper(UserMapper.class);
            User user = new User();
            user.setId("6");
            user.setName("wang");
            user.setGender("2");
            user.setBirthday(new Date());
            user.setCellphone("13343462545");
            user.setDescription("do what I want , when I want");
            user.setEmail("67556677@qq.com");
            user.setHobby("a have fun");
            user.setType("vip");
            
            try {
                mapper.addUser(user);
                session.commit();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                session.rollback();
            }
        }
    }
  • 相关阅读:
    meta标签设置(移动端)
    清除浮动
    响应式设计
    堆和堆排序
    O(n^2)以及O(nlogn)时间复杂度的排序算法
    求数组的最大连续子数组和
    HTTP缓存原理
    将两个有序数组合并为一个有序数组
    如何实现居中对齐
    查找字符串中出现最多的字符
  • 原文地址:https://www.cnblogs.com/taiguyiba/p/6232778.html
Copyright © 2011-2022 走看看