mybatis笔记-1-数据库的基本操作

来源:互联网 发布:三维软件是什么 编辑:程序博客网 时间:2024/05/20 03:41

实体对象

package com.entity;public class Users {    //实体类的属性和表的字段名称一一对应    private int id;    private String name;    private int age;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    @Override    public String toString() {        return "User [id=" + id + ", name=" + name + ", age=" + age + "]";    }}

创建对应的数据库表

CREATE TABLE `users` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(20) DEFAULT NULL,  `age` int(11) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

总的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>    <settings>        <setting name="logImpl" value="LOG4J"/>    </settings>    <!--  懒加载     <settings>        <setting name="lazyLoadingEnabled" value="true"/>        <setting name="aggressiveLazyLoading" value="false"/>    </settings> -->    <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/test?useUnicode=true&amp;characterEncoding=utf-8" />                <property name="username" value="root" />                <property name="password" value="caoxuekun" />            </dataSource>        </environment>    </environments>    <mappers>         <!-- 注册userMapper.xml文件,          userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml-->         <mapper resource="usersMapper.xml"/>     </mappers></configuration>

实际操作的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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀) --><mapper namespace="com.entity.userMapper">    <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复    使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型    resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回    User类就是users表所对应的实体类    -->    <!--         根据id查询得到一个user对象     -->    <select id="getUser" parameterType="int"         resultType="com.entity.Users">        select * from users where id=#{id}    </select>    <!-- 查询集合 -->    <select id="getAllUser" resultType="com.entity.Users">        select name,age from users    </select>    <!-- ResultMaps -->    <select id="userMap" resultType="map">        select * from users    </select>    <!-- type表示实际返回的类型,id表示resultMap的唯一标识符 -->    <resultMap type="com.entity.Users" id="resultMapUsers">        <!--             下面的这个id(<id)标识符表示主键 ,result表示数据表的普通列            property表示数据库映射到实际实体的属性类型,column表示数据库对应的列名        -->        <id property="id" column="id"></id>        <result property="name" column="name"/>        <result property="age" column="age"/>    </resultMap>    <!-- resultMap="resultMapUsers"表示引用上面的resultMap进行数据库表和返回值的映射 -->    <select id="selectResultMap" resultMap="resultMapUsers">        select * from users    </select>    <!-- 级联查询 -->    <resultMap type="com.entity.Student" id="studentResultMap">        <id property="id" column="id"></id>        <result property="name" column="name"/>        <!-- 关联映射 -->        <association property="clazz" column="clazz_id" javaType="com.entity.Clazz"        select="selectClazz"></association>         </resultMap>    <!-- 根据班级id查询班级 -->    <select id="selectClazz" resultType="com.entity.Clazz">        select * from clazz where id = #{id}    </select>    <!-- 查询所有的学生信息 -->    <select id="selectStudent" resultMap="studentResultMap">        select * from student    </select>    <!-- 级联查询2 -->    <resultMap type="com.entity.Person" id="personMap">        <id property="id" column="id"></id>        <result property="name" column="name"/>        <collection property="books" ></collection>         </resultMap>    <!-- useGeneratedKeys设置为"true"表明要MyBatis获取由数据库自动生成的主键;keyProperty="id"指定把获取到的主键值注入到User的id属性-->    <insert id="addUsers" parameterType="com.entity.Users" useGeneratedKeys="true"    keyProperty="id">        insert into users(name,age) values(#{name},#{age});    </insert>      <update id="updateUsers" parameterType="com.entity.Users">        update users set name=#{name} , age=#{age} where id=#{id}    </update>    <delete id="deleteUsers" parameterType="int">        delete from users where id = #{id}    </delete></mapper>

对应的代码操作

package com.test;import java.io.IOException;import java.io.InputStream;import java.util.List;import java.util.Map;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import com.entity.Student;import com.entity.Users;/** * @author caoxuekun * @version V1.0 * @Date 2017年7月11日 上午1:20:36  * @Description:mybatis的curd */public class Test1 {    public static SqlSession getSqlSession() {        // mybatis的配置文件        String resource = "conf.xml";        // 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)        InputStream is = Test1.class.getClassLoader().getResourceAsStream(resource);        // 构建sqlSession的工厂        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);        // 使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)        // Reader reader = Resources.getResourceAsReader(resource);        // 构建sqlSession的工厂        // SqlSessionFactory sessionFactory = new        // SqlSessionFactoryBuilder().build(reader);        // 创建能执行映射文件中sql的sqlSession        SqlSession session = sessionFactory.openSession();        return session;    }    // 查询单个实体    public static void showSingleton() {        SqlSession session = getSqlSession();        /**         * 映射sql的标识字符串,         * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,         * getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL         */        String statement = "com.entity.userMapper.getUser";// 映射sql的标识字符串        // 执行查询返回一个唯一user对象的sql        Users user = session.selectOne(statement, 1);        session.commit();        session.close();        System.out.println(user);    }    // 查询多个    public static void selectAllUser() {        SqlSession session = getSqlSession();        String statement = "com.entity.userMapper.getAllUser";        List<Users> list = session.selectList(statement);        session.commit();        session.close();        for (Users u : list) {            System.out.println(u.getName()+"==="+u.getId()+"===="+u.getAge());        }    }    //ResultMaps1    public static void testResultMaps(){        SqlSession session = getSqlSession();        List<Map<String, Object>> lists = session.selectList("com.entity.userMapper.userMap");        for(Map<String, Object> row:lists){            System.out.println(row);        }        session.commit();        session.close();    }    //ResultMaps2    public static void testResultMaps2(){        SqlSession session = getSqlSession();        List<Users> lists = session.selectList("com.entity.userMapper.selectResultMap");        for(Users user:lists){            System.out.println(user);        }        session.commit();        session.close();    }    //级联    public static void jilian(){        SqlSession session = getSqlSession();        List<Student> lists = session.selectList("com.entity.userMapper.selectStudent");        for(Student s:lists){            System.out.println(s.getId()+"===="+s.getName()+"==="+s.getClazz().getId()+"==="+s.getClazz().getClazzName());        }        session.commit();        session.close();    }    // 增加    public static void insertUsers(Users users) {        SqlSession session = getSqlSession();        String statement = "com.entity.userMapper.addUsers";        session.insert(statement, users);        session.commit();        session.close();    }    // 更新    public static void updateUsers(Users users) {        SqlSession session = getSqlSession();        String statement = "com.entity.userMapper.updateUsers";        session.update(statement, users);        session.commit();        session.close();    }    // 删除    public static void deleteUsers(int id) {        SqlSession session = getSqlSession();        String statement = "com.entity.userMapper.deleteUsers";// 映射sql的标识字符串        // 执行查询返回一个唯一user对象的sql        session.delete(statement, id);        session.commit();        session.close();    }    public static void main(String[] args) throws IOException {        // showSingleton();         Users users = new Users();//       users.setName("电饭锅");//       users.setAge(11);//       users.setId(3);//       insertUsers(users);        // updateUsers(users);        // deleteUsers(3);//      selectAllUser();//       testResultMaps();//       testResultMaps2();         jilian();    }}