JAVA--高级开发--Mybatis框架

<------Mybatis框架------->
import com.model.QuerVo;
import com.model.User;
import com.model.VOUser;
import java.util.List;
//编写持久层IUserDao接口
public interface IUserDao {
    //查询全部的信息
    public List<User> findAll();
    //根据id去查询
    public User finId(Integer  id);
    //添加信息:也就是保存信息
    public int  insert(User user);
    //修改信息
    public int update(User  user);
    //删除学员的信息
    public int delete(Integer stuId);
    //模糊查询
    public List<User> findName(String username);
    //聚合函数查询总记录数
    public int totalcont();
    //使用sum计算年龄的和
    public int agesum();
    //使用聚合函数计算出最大值max
    public int max();
    //使用聚合函数计算出最小值min
    public int min();
    //使用聚合函数计算出平均值avg
    public int  avg();
    //传递的参数是包装类对象
    public List<User>findQuery(QuerVo  querVo);
    //查询全部的信息:  //实体类的属性和表中的不同
    public List<VOUser> finaAlll();
}
//标准的javaBean User实体类
package com.model;
import java.io.Serializable;
//编写User实体类
public class User implements Serializable {
    private static final long serialVersionUID = -8603850515164057242L;
    private Integer id;
    private String  username;
    private String age;
    private String  address;
    public User(){

    }
    public User(Integer id, String username, String age, String address) {
        this.id = id;
        this.username = username;
        this.age = age;
        this.address = address;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", age='" + age + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

Resources配置文件
<?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="com.bdit.IUserDao">
     <!--查询全部的操做-->
    <select id="findAll" resultType="com.bdit.model.User">
        select * from user
    </select>
   <!--根据id去查询-->
    <select id="finId" resultType="com.bdit.model.User" parameterType="int">
        select  *  from user where id=#{id}
    </select>
   <!--保存信息-->
    <insert id="insert" parameterType="com.com.bdit.model.User">
        <!--获取新增用户的id-->
        <selectKey keyColumn="id" keyProperty="id" resultType="int">
            select  last_insert_id();
        </selectKey>
        insert  into user(username,age,address)values(#{username},#{age},#{address})
    </insert>

    <!--修改信息-->
    <update id="update" parameterType="com.com.bdit.model.User">
        update user set username=#{username},age=#{age},address=#{address} where id=#{id}
    </update>

    <!--删除信息:根据用户的id去删除-->
    <delete id="delete" parameterType="com.com.bdit.model.User">
        delete  from user where id=#{id}
    </delete>

    <!--模糊查询-->
   <select id="findName" parameterType="java.lang.String" resultType="com.com.bdit.model.User">
       select * from user  where username like '%${value}%'
   </select>

    <!--使用聚合函数查询表中的总记录数-->
    <select id="totalcont"  resultType="java.lang.Integer">
        select  count(id) from user
    </select>

    <!--sum年龄的总和-->
    <select id="agesum" resultType="java.lang.Integer">
        select  sum(age) from user;
    </select>
    <!--计算出年龄最大值-->
    <select id="max" resultType="java.lang.Integer">
        select max(age) from user;
    </select>
    <!--计算出最小值-->
    <select id="min" resultType="java.lang.Integer">
        select min(age) from user
    </select>
    <!--计算出平均值-->
    <select id="avg" resultType="java.lang.Integer">
        select  avg(age) from user
    </select>
   <!--传递的对象是包装类的对象-->
    <select id="findQuery" resultType="com.com.bdit.model.User" parameterType="com.model.QuerVo">
        select  *  from  user where username  like #{user.username}
    </select>
    <!---实体类的属性和表中的不同时,是查询不到结果的:-->
<!--    <select id="finaAlll" resultType="com.model.VOUser">-->
<!--     select  *  from user-->
<!--    </select>-->
    <!--解决办法:使用别名查询:方法 1 -->
<!--    <select id="finaAlll" resultType="com.model.VOUser">-->
<!--        select id as stuId, username as username ,age as stuage, address as stuaddress from user-->
<!--    </select>-->

    <!---实体类的属性和表中的不同时:解决方法 2
    type属性:指定实体类的全限定名
    id属性:给一个惟一的标识,是给查询select标签引用的
    id标签:用于指定主键的字段
    result标签:用于指定非主键字段
    property属性;用于指定实体类的属性字段
    -->
    <select id="finaAlll" resultMap="Map">
        select  *  from  user
    </select>
    <resultMap id="Map" type="com.model.VOUser">
    <id column="id"  property="stuId"/>
    <result column="username" property="username"/>
    <result column="age" property="stuage"/>
    <result column="address" property="stuaddress"/>
    </resultMap>
</mapper>

SqlMapConfig配置文件java

<?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>
    <!--配置Mybatis的环境-->
    <environments default="mysql">
        <!--配置mysql的环境-->
        <environment id="mysql">
            <!--配置事物的类型-->
            <transactionManager type="JDBC"/>
            <!--配置链接数据库的信息,用的数据源是(链接池)-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ab_wzy?serverTimezone=GMT"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <!--告知mybatis映射文件的位置-->
    <!--SQL映射文件mybatis是不认识的,全部须要告知-->
    <mappers>
        <!--查询全部的方法-->
        <mapper resource="com/dao/IUserDao.xml"/>
        <!--基于注解的方式-->
       <!--<mapper class="com.bdit.IUserDao"/>-->
    </mappers>
</configuration>

编写Mybatis的测试类mysql

package com.bdit;

        import com.model.QuerVo;
        import com.model.User;
        import com.model.VOUser;
        import org.apache.ibatis.io.Resources;
        import org.apache.ibatis.session.SqlSession;
        import org.apache.ibatis.session.SqlSessionFactory;
        import org.apache.ibatis.session.SqlSessionFactoryBuilder;
        import org.junit.After;
        import org.junit.Before;
        import org.junit.Test;

        import java.io.IOException;
        import java.io.InputStream;
        import java.util.List;

//编写Mybatis测试类
public class mybatisTest2 {
    private InputStream input;
    private  SqlSessionFactoryBuilder builder;
    private SqlSessionFactory factory;
    private SqlSession session;
    private IUserDao userDao;

    @Test //查询全部的信息
    public  void findAll(){
        List<User>list=userDao.findAll();
        for(User  user:list){
            System.out.println(user);
        }
    }
    @Test //根据id去查询
    public  void findId(){
        User  user=userDao.finId(2);
        System.out.println(user);
    }
    @Test //添加信息:保存
    public void insert(){
        User  user=new User();
        user.setUsername("刘备");
        user.setAge("37");
        user.setAddress("三国");
        int  i=userDao.insert(user);
        if(i>0){
            System.out.println("添加成功");
        }else{
            System.out.println("添加失败");
        }
        System.out.println("获取新增用户的id"+user.getId());
    }
    //修改学员的信息
    @Test
    public  void  update(){
        User user=userDao.finId(6);
        user.setUsername("关羽");
        user.setAge("23");
        user.setAddress("三国");
        int i=userDao.update(user);
        if(i>0){
            System.out.println("修改为功");
        }else{
            System.out.println("修改失败");
        }
    }
    //删除学员的信息
    @Test
    public  void  delete(){
        int  i=userDao.delete(7);
        if(i>0){
            System.out.println("删除成功");
        }else{
            System.out.println("删除失败");
        }
    }
    //模糊查询
    @Test
    public void findName(){
        List<User>list=userDao.findName("wen");
        for(User user:list){
            System.out.println(user);
        }
    }
    //使用聚合函数查询表中的总记录数
    @Test
    public void totalcount(){
        int  i=userDao.totalcont();
        System.out.println("总记录数"+i);
    }
    //使用聚合函数计算年龄的总和
    @Test
    public void agesum(){
        int  i=userDao.agesum();
        System.out.println("年龄的总和"+i);
    }
    //使用聚合函数计算出年龄最大值
    @Test
    public  void max(){
        int  i=userDao.max();
        System.out.println("年龄最大的"+i);
    }
    //使用聚合函数就算出年龄最小值
    @Test
    public void min(){
        int  i=userDao.min();
        System.out.println("年龄最小的"+i);
    }
    //使用聚合函数计算出年龄平均值
    @Test
    public void  avg(){
        int i=userDao.avg();
        System.out.println("平均年龄"+i);
    }
    //传递的类型是包装类时
    @Test
    public void findQuery(){
        QuerVo  querVo=new QuerVo();
        User  user=new User();
        user.setUsername("%李%");
        querVo.setUser(user);
        List<User>list=userDao.findQuery(querVo);
        for(User  user1:list){
            System.out.println(user1);
        }
    }
    //实体类的属性和表中的不同
    @Test
    public  void finaAlll(){
        VOUser voUser=new VOUser();
        List<VOUser>list=userDao.finaAlll();
        for(VOUser user1:list){
            System.out.println(user1);
        }
    }
    @Before //封装好的数据,初始化时加载
    public void init()throws IOException {
        //1 、 读取配置文件-->SqlMapConfig核心的配置文件
        input = Resources.getResourceAsStream("SqlMapConfig.xml");
        //二、建立SqlSessionFactoryBuilder构建者的对象。
        builder = new SqlSessionFactoryBuilder();
        // 三、使用构建者对象建立工厂对象:SqlSessionFactory
        factory = builder.build(input);
        //四、使用SqlSessionFactory对象建立SqlSession对象
        session = factory.openSession();
        //五、使用SqlSession对象建立Dao接口的代理对象
        userDao = session.getMapper(IUserDao.class);
    }
    @After
    public  void  destory()throws IOException {
        //提交事务
        session.commit();
        //关闭释放资源
        session.close();
        input.close();
    }

}
相关文章
相关标签/搜索