Mybits

mybatis 入门基础练习

首先 导入jar包 1,mybatis-3.5.2.jar 2,log4j-1.2.17.jar 日志包。3,mysql-connector-java-5.1.35.jar
然后建立项目
首先配置jdbc 加载驱动文件
未配置的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>  <environments default="development"> 
    <environment id="development">   
        <!--transactionManager 事务管理器-->
        <transactionManager type="JDBC"/>
          <!--dataSource 数据源-->
           <!--POOLED 连接池-->
        <dataSource type="POOLED">    
            <property name="driver" value="${driver}"/>    
            <property name="url" value="${url}"/>      
            <property name="username" value="${username}"/>  
            <property name="password" value="${password}"/>  
        </dataSource>  
    </environment> 
    </environments>
    <mappers>  
    <!--mapper 映射-->
  <mapper resource="org/mybatis/example/BlogMapper.xml"/>  
    </mappers> 
</configuration>

配置后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>
    <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/wu5"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--<mapper resource="org/mybatis/example/BlogMapper.xml"/>-->
        <mapper resource="OrgMybatis/mapper/Stumentmapper.xml"/>
    </mappers>
</configuration>

终极版的mybatis-config.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>
    <!--properties 这个标签加载读取文件-->
    <properties resource="db.properties"/>
<typeAliases>
    <!--1.自己起名字-->
  <!-- <typeAlias type="OrgMybatis.domain.Student" alias="stu"/>-->
    <!--name 2.批量起名 mybatis 规定该类下的包名 -->
  <!--<package name="OrgMybatis.domain"/>-->
</typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--修改的位置 反射获取key 得到vule-->
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--<mapper resource="org/mybatis/example/BlogMapper.xml"/>-->
  <mapper resource="OrgMybatis/Dao/Stumentmapper.xml"/>
       <!-- 批量注册mapper映射文件文件 未来开发的模式 -->
 <!-- <package name="OrgMybatis.Dao"/>-->
    </mappers>
</configuration>

被读取的文件 db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/wu2
jdbc.username=root
jdbc.password=1234

Dao 层
ClassStudentDao 接口

package OrgMybits01.Dao;
import OrgMybits01.entrty.ClassStu;
public interface ClassStudentDao {
    //查询单条的方法
    ClassStu select(String id);
}

ClassStudent.xml (主要写sql 标签)

<?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="连接池",当前接口的路径--> 有些东西就是死的记住
<mapper namespace="OrgMybits01.Dao.ClassStudentDao">
   <!-- 查询单条记录 resultType返回结果集 包含在实体类反射加载实体类  OrgMybits01.entrty.ClassStu"-->
    <select id="select" parameterType="java.lang.String" resultType="OrgMybits01.entrty.ClassStu">
           SELECT * FROM  ClassStu WHERE id= #{id}
    </select>
</mapper>

封装的工具类

package OrgMybits01.Util;
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 java.io.IOException;
import java.io.InputStream;

public class SqlSessionUtil {
    //私有化构造方法
    public SqlSessionUtil(){}
    private  static  SqlSessionFactory sqlSessionFactory;
    /* 静态代码块的特色(在代码中优先执行一次)*/
    static {
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
         sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }
         private  static ThreadLocal<SqlSession> t = new ThreadLocal<SqlSession>();
        //1.获取SqlSession 对象;
        public static SqlSession getSession(){
            SqlSession Session = t.get();//不一定能获取
        if(Session==null){
           Session = sqlSessionFactory.openSession();
            t.set(Session);
        }
        return Session;
        }
    //1.关闭SqlSession 对象;
  public static  void myclose(SqlSession Session){
            if(Session!=null){
                Session.close();
            }
      //一定要销毁分配(玻璃)的线程  方便下次分配的线程是干净的
            t.remove();
  }
    }

测试类

package OrgMybits01.Test;
import OrgMybits01.Dao.ClassStudentDao;
import OrgMybits01.Util.SqlSessionUtil;
import OrgMybits01.entrty.ClassStu;

public class Test {
    public static void main(String[] args) {
        ClassStudentDao classStu= SqlSessionUtil.getSession().getMapper(ClassStudentDao.class);
        //查询单条记录
       ClassStu stu = classStu.select("103");
        System.out.println(stu);
    }
}

ClassStu{id='103', name='wutian', age='4', address='包子山'}

还有一个实体类自己写

接下来上面的框架基本就是搭建好了 我只在测试类和接口 ClassStudentDao 文件 ClassStudent.xml 写代码。
/1. 项目需求 查询年龄 返回一个班级的集合

List<ClassStu> list = classStu.select1(23);
        for (ClassStu s:list
        ) {
            System.out.println(s);
        }
   //接口的方法
    List<ClassStu> select1(int age);
//ClassStudent.xml (主要写sql 标签)
 <!-- 查询单条记录age-->
    <select id="select1" parameterType="int" resultType="OrgMybits01.entrty.ClassStu">
           SELECT * FROM  ClassStu WHERE age= #{age}
    </select>


/2. 项目需求 查询 姓名= ‘’ 年龄的 age=’’;*

//测试类
        ClassStu  ss = new ClassStu();
       ss.setName("wukong");
       ss.setAge(23);
        ClassStu stu2 = classStu.select3(ss);
        System.out.println(stu2);
   //接口的方法
    ClassStu select3(ClassStu ss);
//ClassStudent.xml (主要写sql 标签)
 <!-- 查询单条记录 name ====age-->
    <select id="select3" parameterType="OrgMybits01.entrty.ClassStu" resultType="OrgMybits01.entrty.ClassStu">
           SELECT * FROM  ClassStu WHERE name=#{name} and age=#{age}
    </select>

/3. 项目需求 方法2 查询 姓名= ‘’ 年龄的 age=’’ 封装传入参数 map 传入值返回集合

// 查询 姓名= '' 年龄的 age='' 封装传入参数 map 传入值返回集合
        Map<String,Object> map = new  HashMap<String,Object>();
        map.put("name","wukong");
        map.put("age",23);
        List<ClassStu> list = classStu.select4(map);
        for (ClassStu s:list
             ) {
            System.out.println(s);
        }
     //接口的方法
      List<ClassStu> select4(Map<String, Object> map);
 <!-- 查询单条记录 name ====age-->
    <select id="select4" parameterType="map" resultType="OrgMybits01.entrty.ClassStu">
           SELECT * FROM  ClassStu WHERE name=#{name} and age=#{age}
    </select>

//4.like 模糊查询的使用查询名字中含有s 的

  //like 模糊查询的使用查询名字中含有s 的
        List<ClassStu> list = classStu.select5("k");
        for (ClassStu s:list
        ) {
            System.out.println(s);
        }
  //接口的方法
List<ClassStu> select5(String s); 
  <!-- 查询单条记录 name ==带==k-->
    <select id="select5" parameterType="String" resultType="OrgMybits01.entrty.ClassStu">
           SELECT * FROM  ClassStu WHERE  name like  '%' #{name} '%'
    </select>

// 5 查询有多少条记录

//查询有多少条记录
int  count= classStu.select6();
      System.out.println(count);
 //接口的方法
int select6();
 <!-- 查询多少条记录 -->
    <select id="select6"  resultType="int">
         SELECT COUNT(*) FROM   ClassStu
    </select>

//6 查询所有的学生

 // 查询所有的学生
        List<ClassStu> list= classStu.select7();
        for (ClassStu s :list) {
            System.out.println(s);
        }
    }
// dao
List<ClassStu> select7();
 <!-- 所有条记录 -->
    <select id="select7"  resultType="OrgMybits01.entrty.ClassStu">
         SELECT * FROM   ClassStu
    </select>

//7 查询所有放到map 中

//当第一次获取到的Student 单条数据放到MaP 中    当第二次获取到的Student单条数据放到MaP1 中
 //Mybatis 会自动创建map 的所有对象放到 List 集合中
List<Map<String,Object>> mapList = classStu.select8();
        for (Map<String,Object> s:mapList
        ) {
            Set<String> strings = s.keySet();
            System.out.println(strings);
            for (String s1:strings
            ) {
                System.out.println("key=========="+s1);
                System.out.println("value========"+s.get(s1));
            }
        }
        //
         List<Map<String, Object>> select8();
 <!-- 所有条记录 -->
    <select id="select8"  resultType="map">
         SELECT * FROM   ClassStu
    </select>

// 8 字段名(字段名与数据库名不一样是的查询);方法 重名名字段名

//1 字段名(字段名与数据库名不一样是的查询);方法 重名名字段名
        List<ClassStu> list= classStu.select9();
        for (ClassStu s :list) {
            System.out.println(s);
        }
//
 List<ClassStu> select9();
<!-- 所有条记录 fname你查询的fname 人家到ClassStu 找不到 然后就插入不了值-->
    <select id="select9"  resultType="OrgMybits01.entrty.ClassStu">
         SELECT id,fname as name,age FROM   ClassStu
    </select>
<!--fname as name 重命名-->

// 9 字段名(字段名与数据库名不一样是的查询);方法 map 配置

// 开发一定尽量表名的字段名尽量 和类属性名一致
//字段名(字段名与数据库名不一样是的查询);方法 map 配置
        List<ClassStu> list= classStu.select10();
        for (ClassStu s :list) {
            System.out.println(s);
        }
//
   List<ClassStu> select10()
 <!--id 标签 配置主键的    result 配置普通字段
  一个id两个普通字段 所以要 id一个 result两个  property 类属性
     column  数据库字段名-->
<resultMap  id="cls" type="OrgMybits01.entrty.ClassStu" >
        <id property="id" column="id"></id>
        <result property="name" column="fname"></result>
        <result property="age" column="age"></result>
    </resultMap>
    <select id="select10"  resultMap="cls">
         SELECT * FROM   ClassStu
    </select>

// 10 动态sQL的测试 where + if 标签(只能输入英文 不能汉子)

  ClassStu dd = new ClassStu();
        dd.setName("wukong");
         dd.setAddress("44");
        List<ClassStu> list= classStu.select13(dd);
        for (ClassStu s:list
             ) {
            System.out.println(s);
        }
<!--/*  当where标签使用的时候 必须使用if 标签
 通过if 进行条件判断如果有条件附件的 where条件显示否则 不显示
 */-->
<select id="select13" parameterType="OrgMybits01.entrty.ClassStu" resultType="OrgMybits01.entrty.ClassStu">
         SELECT * FROM   ClassStu
    <where>
        <if test="name!=null and name!=''">
         name like '%' #{name} '%'
         </if>
        <if test="address!=null and address!=''">
          and  address like '%' #{address} '%'
        </if>
    </where>
    </select>

//11 sql 片段

  ClassStu Stu= classStu.select11("wufan");
        System.out.println(Stu);
//
  ClassStu select11(String s);
   </select>
        <sql id="sql1">
        select * from ClassStu
    </sql>

        <select id="select11" parameterType="OrgMybits01.entrty.ClassStu" resultType="OrgMybits01.entrty.ClassStu">
         <include refid="sql1"/> where  name =#{name}
    </select>

//12 // 动态sQL的测试 foreach 标签

//
String arr[] ={"101","wufan","12"};
       List<ClassStu> li = classStu.select12(arr);
        for (ClassStu s:li
             ) {
            System.out.println(li);
        }
        //
          List<ClassStu> select12(String[] arr);
 <!-- /* foreach 用来便利传入的数组
     array 数组
  list 集合
     item 每次便利出的元素。在使用改元素的时候,需要在#{}中
        id就是每次便利出来的元素
        collection 标识传递参数的类型
        open 拼接元素的开始符号
        close 拼接元素的结束符号
        separator  元素与元素之间的分割符合
        */-->
<select id="select12" parameterType="OrgMybits01.entrty.ClassStu" resultType="OrgMybits01.entrty.ClassStu">
       select * from ClassStu   where  id in
       <foreach collection="array" item="id" open="(" close=")" separator=",">
           #{id}
       </foreach>
    </select>

13 //测试多表连接查询 查询姓名 班级

//测试多表连接查询 查询姓名 班级
      List<Map<String,Object>> s= StudentDao.select16();
        for (Map<String,Object> map: s
             ) {
            Set<String> strings = map.keySet();//获取key的集合
            for (String key:strings
                 ) {
                System.out.println("key:--->"+key);
                System.out.println("value:--->"+map.get(key));
            }
            System.out.println("===============================");
        }
//
   List<Map<String,Object>> select16();

  <select id="select16" resultType="map">
  SELECT
   s.name,
   w.classname
   FROM  stu  s
    JOIN  xu w
    ON w.idd = s.calssr
    </select>

14//测试多表连接查询 查询姓名 班级 vo的使用 创建一个类 属性自己定义

List<StudentVo> s =StudentDao.select17();
        for (StudentVo ss:s
             ) {
            System.out.println(ss);
        }
     List<StudentVo>  select17();
<!--vo的使用 创建一个类 属性自己定义-->
    <select id="select17" resultType="OrgMybatis.VO.StudentVo">
SELECT
   s.id,
    s.name,
     s.age,
      s.address,
       w.idd,
      w.classname
   FROM  stu  s
    JOIN  xu w
    ON w.idd = s.calssr
    </select>

15 测试多表连接查询 查询姓名 班级 指定姓名

List<StudentVo> s =StudentDao.select18("we");
        for (StudentVo ss:s
             ) {
            System.out.println(ss);
        }
     List<StudentVo>   select18(String name);
<!--vo的使用 创建一个列 属性自己定义-->
    <select id="select18" resultType="OrgMybatis.VO.StudentVo">
SELECT
   s.id,
    s.name,
     s.age,
      s.address,
       w.idd,
      w.classname
   FROM  stu  s
    JOIN  xu w
    ON w.idd = s.calssr
 where  s.name like '%' #{name} '%'
  </select>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值