Mybatis

来源:互联网 发布:美国国籍 知乎 编辑:程序博客网 时间:2024/05/22 17:40

Mybatis

  1. mybatis的配置文件写法

    <environments default="development><denvironment id="development">    <transactionManager type="JDBC">    <dataSource type="POOLED">        <property name="driver" value="com.mysql.jdbc.Driver">        <property name="url" value="jdbc:mysql://localhost:3306/mybatis"        <property name="usrname" value="root">        <property name="password" value="root">    </dataSource></environment></environments><mappers><mapper resource="/../userMapper.xml"> 注册mapper
  2. 建立表对应的实体类

  3. 定义操作users表的sql映射文件userMapper.xml

    <mapper namespace=sql映射文件的id><select id="getUser" parameterType="int" resultType=类>    select * from users where id=#{id}</select>
  4. 建立一个测试类

    String resouce = "conf.xml";Reader reader = Resources.getResourceAsReader(resource);SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);//默认是手动的,传入true为自动提交SqlSession session = sessionFactroy.openSession();Streing statement = "com.....userMapper"(映射文件的ID)+".selectUser";User user = session.selectOne(statement,1);session.commit();或Test.class.getClassLoader().getResourceAsStream(resource);SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession session = factory.openSession();String statement = "映射文件" + "标签";session.selectone(statemet, 2);
  5. 增删改查xml实现

    userMapper.xml中:<insert id="addUser" parameterType="对象的类"> insert into users(name, age) values(#{name}, #{age});//写的都是对象的某个属性</insert><delete id="deleteUser" parameterType="int"> delete from users where id=#{id}</delete><upadate id="updateUser" parameterType="类"> update user set name=#{name},age=#{age} where id=#{id}</upadate>
  6. 基于注解的实现

    创建一个接口,实现增删改查,例如:@Insert("insert into users(name,age) values(#{name},#{age})")public int add(User user);不用写实现类,自动创建,使用:UserMapper mapper = session.getMapper(UserMapper.class);int add = mapper.add(new User(-1,"SS",45));conf.xml中也要加上mapper:<mapper class="com.atguigu.day03_mybatis.test2.UserMapper"/>
  7. 以上优化的地方

    连接数据库的配置放在单独一个properties文件中,然后引用:<properties resource="db.properties"/>引用:<property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/>配置实体类的别名:<typeAliases><typeAlias type="com...User" alias="_User"/>    或者直接用package,将能识别简单类名    <package name="包"/></typeAliases>
  8. 解决字段名与实体类属性名不相同的冲突

    使用别名:SELECT order_id id,order_no orderNo, order_price price FROM orders WHERE ....另一种解决方式,定义resultMap<select id="" parameterType resultMap="">SELECT * FROM orders WHERE order_id=#{id}</select>//resultMap封装映射关系,id针对主键,result针对其他一般字段<resultMap type="Order" id="getOrder2Map"><id property="id" column="order_id"/><result property="" column=""/><result property="" column=""/></restultMap>
  9. 实现关联表查询

    方式一:嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集,封装联表查询的数据(去除重复的数据):<select id="" parameteType="" resultMap="">select * from class c, teacher t where c.teacher_id=t.t_id and c.c_id=#{id}</select><resultMap type="" id=""><id property="" column=""/><result property="" column=""/><association property="" column="" javaType="">    <id property="" column=""/>    <result property="" column=""/></association></resultMap>方式二: 嵌套查询:通过执行另一个SQL映射语句来返回预期的复杂类型SELECT * FROM class WHERE c_id=1;SELECT * FROM class WHERE t_id=1;<select id="" parameteType="" resultMap="">select * from class where c_id=#{id}</select><resultMap type="" id=""><id property column/><result property column/>...
  10. 一对多的关联查询(一个班级对多个学生)(简记)

    select id resultMap   select * from class where c_id=#{id}select id resultMap    select t_id id, t_name name form Teacher where t_id=#{id}select id resultType   select s_id id, s_name name from student where class_id={id}resultMap type id     id property column    result property column    association property column select    collection property column selector:select * from class c, student s where c.teacher_id=t.t_id c.c_id=s.class_id and c_id=1;select id parameterType resultMap>    sqlresultMap type="Classes" id="getClassMap">    <id property column    <result propety column    <association property="teacher" javaType="Teacher"    <collection property ofType="Student"        <id column        <result property="name" column="s_name"     
  11. 动态SQL与模糊查询

    多条件查询:查询条件封装成类:    ConditionUser: string name;int minAge;int maxAge;//支持jstl判断select id=getUser parameterType=ConditionUser resultType=User    select * from d_user where     if test=name!="%null%"        name like #{name} and age between #{minAge} and #{maxAge}
  12. 调用存储过程

    通过parameterMap传参select id=getUserCount paramtertMap=getUserCount statementType=CALLABLE    CALL mybatis.ges_user_count(?,?)parameterMap type=java.util.Map id=getUserCountMap    parameter property=sexid mode=IN jdbcType=INTEGER    parameter property=usercount mode=OUT jdbcType=INTEGER

原创粉丝点击