Mybatis总结

一、Mybatis主配置文件

1、连接数据库:

<environments default="mysql">
<!--        配置mysql的环境-->
        <environment id = "mysql">
<!--            配置事务-->
            <transactionManager type = "JDBC"></transactionManager>
<!--            配置连接池,第二行的value是数据库的名称-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="12345"/>
            </dataSource>
        </environment>
    </environments>

2、设置映射关系(以下三种方式都可以)

 <mappers>
        <mapper resource="com/xxx/dao/IUserDao.xml"></mapper>
 </mappers>


 <mappers>
        <mapper class="com.xxx.dao.IUserDao"></mapper>
 </mappers>


 <mappers>
        <package name="com.xxx.dao">
 </mappers>

3、配置别名

 <typeAliases>
        <!--typeAlias用于配置别名,type属性指定的是实体类全限定类名。alias属性指定别名,当指定了别名就不再区分大小写 -->
        <typeAlias type="com.xxx.domain.User" alias="user"></typeAlias>
    </typeAliases>

二、dao(mapper)xml层

1、实体属性和数据库字段不统一的情况,使用resultMap

<!--    配置 查询结果的列名和实体类的属性名对应关系-->
    <resultMap id="userMap" type="com.xxx.domain.User">
<!--  主键字段的对应-->
        <id property="userId" column="id"></id>
<!--        非主键字段的对应-->
        <result property="username" column="username"></result>
        <result property="userAddress" column="addresss"></result>
        <result property="userSex" column="sex"></result>
        <result property="userBirthday" column="birthday"></result>

    </resultMap>

 <select id ="findAll" resultMap= "userMap">
        select * from user
 </select>

一致的情况下使用resultType

 <select id="findByName" parameterType="string" resultType = "com.xxx.domain.User">
        select * from user where username like #{%name%}
--         select * from user where username like'%{value}%'

 </select>

2、标签以及sql语句

<!--    保存用户-->
<insert id="saveUser" parameterType="com.xxx.domain.User">

        <!-- 配置插入操作之后,获取插入数据的id-->

        <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
            select  last_insert_id();
        </selectKey>

        insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday});

 </insert>


<!--    更新用户-->
<update id="updateUser" parameterType="com.xxx.domain.User">

     update user set username=#{username},address=#{address}, sex= #{sex}, birthday=#{birthday} where id = #{id}

    </update>


<!--    查询用户的总记录条数-->
<select id="findTotal" resultType="int">
        select count(id) from user;
</select>

<!--    删除用户-->
<delete id="deleteUser" parameterType="java.lang.Integer">
        delete from user where id=#{id}
</delete>

三、接口层

1、简单的注解

    /**
     * 删除用户
     */

    @Delete("delete from user where id = #{id}")
    void deleteUser(Integer userid);

2、使用Result(当数据库名字和实体名字对应不上的时候)

  /**
     * 查询所有用户
     *
     * @return
     */
    @Select("select * from user")

    @Results(id="userMap",value={
            @Result(id=true,column = "id",property = "id"),
            @Result(column = "username",property = "username"),
            @Result(column = "address",property = "address"),
            @Result(column = "birthday",property = "birthday")

    })
    List<User> findAll();

    /**
     * 根据Id进行查询
     * @param userId
     * @return
     */
    @Select("select * from user where id = #{id}")
    @ResultMap(value={"userMap"})
    User findById(Integer userId);

3、一对一的对应关系查询

①一个实体里面声明另一个实体

public class Account implements Serializable {
    private Integer id;
    private Integer uid;
    private Double money;
    // 一个账户只能属于一个用户
    private  User user;

//get and set
}

one代表的是一对一的对应关系

eager立即加载,一对一使用这个,多对多使用lazy

public interface IAccountDao {
    /**
     * 查询所有账户,并且获取每个账户所属的用户信息
     */

    @Select("select * from account")

    @Results(id ="accountMap", value={
            @Result(id=true ,column = "id",property = "id"),
            @Result(column = "uid",property = "uid"),
            @Result(column = "money",property = "money"),
            @Result(property = "user",column = "uid",one=@One(select = "com.itheima.dao.IUserDao.findById",fetchType= FetchType.EAGER))
    })
    List<Account> findAll();

}

三、客户端

关掉一级缓存的两种方式

public class MybatisTest {
    private InputStream in;
    private SqlSessionFactory factory;
    private SqlSession sqlSession;
    private IUserDao userDao;
 
    //此注解用于在测试方法之前执行
    @Before
    public void init() throws  Exception{
        //读取配置文件,生成字节输入流
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //获取sqlsessionfactory
        factory = new SqlSessionFactoryBuilder().build(in);
        //获取sqlsession 对象
        sqlSession = factory.openSession();
        //获取dao的代理对象
        userDao = sqlSession.getMapper(IUserDao.class);
    }
 
    //此注解用于在测试方法之后执行
    @After
    public void destory() throws  Exception{
        //释放资源
        sqlSession.close();
        in.close();
    }

    public void test(){
    User user1=userDao.findById(41);
    ······

    //sqlSession.close();
    //sqlSession=factory.openSession();

    sqlSession.clearCache();
    ······

}

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值