Mybatis总结

Mybatis

1.持久层的框架,支持普通的sql语句,存储过程

2.封装了底层的jdbc

3.提高开发效率

4.sql语句可以配置到xml文件中,注解

框架的使用

建库 create database mydb;

1.建表

create table t_user(
    id int auto_increment primary key,
    name  varchar(50),
    pwd  varchar(32),
    email varchar(50),
    phone varchar(32)
)

2.新建工程

1)新建maven工程
2)添加web.xml
3)添加tomcat运行环境
4)添加依赖jar包
    mybatis.jar,mysql.jar,junit.jar

3.编写实体类User

public class User {

    private Integer id;
    private String name;
    private String pwd;
    private String email;
    private String phone;
    ....
}

4.配置mybatis框架

1)配置文件

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" 
    "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
    <environments default="environment">
        <environment id="environment">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url"
                    value="jdbc:mysql://localhost:3306/db" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
    <!-- <mappers>
        <mapper resource="StudentMapper.xml" />

    </mappers> -->
</configuration>

2)映射文件
<!-- namespace表示命名空间,值不能重复 -->
<mapper namespace="userDao">
    <!-- id属性, 给节点定义名字,不能重复-->
    <!-- void insertUser(User user); 
    parameterType表示方法的参数列表-->
    <insert id="addUser" 
        parameterType="cn.mybatis.bean.User">
        insert into t_user(
            name,pwd,email,phone
        )values(
            #{name},#{pwd},#{email},#{phone}
        )

    </insert>
    <!-- 修改t_user表信息 -->
    <!-- void updateUser(User user); -->
    <!-- update用来实现修改功能的节点 
          id属性给update节点起名,名字唯一
          parameterType表示参数的类型
    -->
    <update id="updateUser" 
    parameterType="cn.mybatis.bean.User">
        update  
            t_user
        set
            name = #{name},pwd = #{pwd},
            email = #{email},phone = #{phone}

        where
            id = #{id}
    </update>
    <!-- 根据id删除一条记录 -->
    <!-- void deleteUser(Integer id) -->
    <!-- 1.delete表示删除功能的节点 ;
          2.如果参数列表是基本数据类型(封装类类型)
            或者String类型,可以省略parameterType;
          3.如果不省略,
         可以写成parameterType="java.lang.Integer"
    -->
    <delete id="delUser">
        delete from t_user
        where
            id=#{id}
    </delete>
    <!-- 根据id查询用户信息 -->
    <!-- User selectUserById(Integer id) -->
    <!-- select用来实现查询功能
          resultType表示记录封装的实体类类型
           封装的规则:默认把表的字段名作为类的属性名
     -->
    <select id="getUserById" 
        resultType="cn.mybatis.bean.User">
        select *
        from 
            t_user
        where
            id=#{id}
    </select>
    <!-- 查询表中的所有数据 -->
    <!-- List<User> selectAll() -->
    <select id="selectAll" 
        resultType="cn.mybatis.bean.User">
            select * 
            from t_user
    </select>
</mapper>

5.编写持久层(使用mybatis提供的api实现对数据库表的操作)

1)定义接口

public interface UserDao {
/**
 * 插入t_user表的数据
 * @param user
 */
void insertUser(User user);
/**
 * 修改t_user表的数据
 * @param user
 */
void updateUser(User user);
/**
 * 根据id删除t_user表的数据
 * @param id
 */
void deleteUser(Integer id);
/**
 * 根据id查询用户信息
 * @param id
 * @return 如果id存在,返回user,否则返回null
 */
User selectUserById(Integer id);
/**
 * 返回表中的所有数据
 * @return
 */
List<User> selectAll();
}

2) 定义接口的实现类

public class UserDaoImpl implements UserDao{

public void insertUser(User user) {
    //通过mybatis提供的api方法,实现插入

    //3.SqlSession session=? //Connection
    SqlSession session = 
            SessionUtil.getSession();
    //第一个参数表示:namespace+id

    session.insert("userDao.addUser", user);
    //提交事务
    session.commit();
    //关闭session
    session.close();
}

public void updateUser(User user) {
    //获取session对象
    SqlSession session = 
        SessionUtil.getSession();
    //调用update方法
    session.update("userDao.updateUser",user);
    //提交事务
    session.commit();
    //关闭session
    session.close();
}

public void deleteUser(Integer id) {
    //获取session对象
    SqlSession session = 
            SessionUtil.getSession();
    //调用delete
    session.delete("userDao.delUser",id);
    //提交事务
    session.commit();
    //关闭session
    session.close();

}

public User selectUserById(Integer id) {
    SqlSession session =
            SessionUtil.getSession();
    User user = 
            session.selectOne("userDao.getUserById", id);
    session.close();
    return user;
}

public List<User> selectAll() {
    SqlSession session =
            SessionUtil.getSession();
    List<User> list =
       session.selectList("userDao.selectAll");
    session.close();
    return list;
}

}

小结:

持久层:

1.定义接口

2.定义接口的实现类

3.sql语句设置到映射文件中

SqlSession提供的方法:insert update delete selectOne selectList

基于Mapper映射器的mybatis框架的使用(重点)

建表

create table t_address(
    id int auto_increment primary key,
    province varchar(50),
    city varchar(50),
    area varchar(50),
    user_address varchar(50)
)

创建工程

1)创建maven工程
2)添加web.xml文件
3)添加tomcat运行环境
4)添加依赖jar包 mysql  mybatis junit

添加mybatis的配置文件

1.把SqlConfig.xml放到resources文件夹下;此文件配置的信息用来实现数据库连接的配置信息

2.在resources文件中,创建新的文件夹mappers,在mappers文件夹中,放置映射文件AddressMapper.xml;

对表完成crud的操作

1.创建实体类

public class Address {
    private Integer id;
    private String province;
    private String city;
    private String area;
    private String userAddress;

    ....
}

2.持久层

1)定义接口

public interface AddressDao {
    void insertAddress(Address address);
    void updateAddress(Address address);
    void deleteAddress(Integer id);
    Address selectById(Integer id);
    List<Address> selectAll();

}

2)映射文件

<!-- namespace的值必须是接口名 -->
<mapper namespace="cn.mybatis.dao.AddressDao">
    <!-- 插入数据 -->
    <!-- void insertAddress(Address address); -->
    <!-- 
        id的值必须为方法的名称
        parameterType表示方法的参数类表
     -->
    <insert id="insertAddress" 
        parameterType="cn.mybatis.bean.Address">
            insert into t_address(
                province,city,area,user_address
            )values(
                #{province},#{city},#{area},
                #{userAddress}
            )
    </insert>
    <!-- 修改地址信息 -->
    <!-- void updateAddress(Address address); -->

    <update id="updateAddress"
        parameterType="cn.mybatis.bean.Address">
        update 
            t_address
        set
            province = #{province},
            city = #{city},
            area = #{area},
            user_address = #{userAddress}   
        where
            id = #{id}
    </update>
    <!-- 删除地址信息 -->
    <!-- void deleteAddress(Integer id); -->
    <delete id="deleteAddress">
        delete from t_address
        where
            id=#{id}
    </delete>
    <!-- 根据id查询地址信息 -->
    <!-- Address selectById(Integer id); -->
    <!-- 如果字段名和属性不相同;
           那么给字段起别名,别名要和属性名相同
     -->
    <select id="selectById" 
    resultType="cn.mybatis.bean.Address">
        select
            id,province,city,area,
            user_address userAddress
        from
            t_address
        where
            id = #{id}

    </select>
</mapper>

总结:

1.mybatis:持久层;封装了jdbc底层的api;映射文件(核心)编写sql语句.

2.mapper节点中,namespace="接口的名称";

3.<insert><update><delete><select>

4.以上4个节点中,id属性值="方法的名称"

5.都可以有parameterType属性:如果属性是基本数据类型或者String类型,可省略;如果是实体类类型必须写上

6.<insert><update><delete>没有resultType,只有<select>有resultType;如果查询的方法返回类型为实体类类型或者List<实体类类型>类型,resultType的值表示记录封装的实体类类型

7.在查询时候,如果字段名和属性名不相同,有两种解决方案:

1.给字段起别名:别名必须和属性名相同
2.字段和属性之间做个映射
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值