mybatis

1.三层架构包括:1.界面层接收用户数据,显示请求处理结果;2.业务逻辑层:接收传递过来数据,处理业务逻辑,调用数据访问层获取数据;3:与数据库打交道

2.框架就是整个或部分系统的可重用组件

3.Mybatis框架是基于java的一个持久层框架,内部封装jdbc,开发者只需要关注sql语句,不需要关注加载驱动,创建连接,statement,关闭资源等,通过xml或注解进行sql配置,通过java对象和sql的动态参数进行映射最终需要执行的sql语句,最终由mybatis框架执行映射java对象返回。

4.创建maven工程,引入mybatis和mysql依赖,如果配置文件放在java目录下需在pom中配置

<build>
  <resources>
    <resource>
      <directory>src/main/java</directory><!--所在的目录-->
      <includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
        <include>**/*.properties</include>
        <include>**/*.xml</include>
      </includes>
      <filtering>false</filtering>
    </resource>
  </resources>
</build>,1.创建一个StudentDao接口,一个查询方法int deleteById();2.编写Dao接口的映射文件StudentDao.xml,namespace="接口的全限定包名加接口",对应增删改查方法,id为接口中的方法名,参数和返回类型,java内置的数据类型可以用小写名称,写sql语句例如delete from student where id=#{};3.在resources下创建mybatis.xml主配置文件
<settings>//配置日志
    <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<typeAliases>//配置别名package批量配置
    <typeAlias type="com.bjpowernode.pojo.Student" alias="student"/>
</typeAliases>
<environments default="mysql">//配置数据库环境可以指定多个,default哪个id生效
    <environment id="mysql">//别名
        <transactionManager type="JDBC"></transactionManager>//事务
        <dataSource type="POOLED">//POOLED数据源为连接池
            <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
            <property name="username" value="root"/>
            <property name="password" value="root"/>
        </dataSource>
    </environment>
</environments>
<mappers>//指定映射文件
    <mapper resource="dao/StudentDao.xml"/>
</mappers>4.在主方法中创建mybatis核心类SqlSessionFactory对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
InputStream is = App.class.getClassLoader().getResourceAsStream("mybatis.xml");
SqlSessionFactory factory = builder.build(is);
SqlSession session = factory.openSession(true);//获取数据库连接
session.delete("dao.StudentDao.deleteById",8);//执行操作
session.close();

5.mybatis的动态代理session.getMapper(StudentDao.class);传入一个接口类对象,动态代理生成实现类,底层代码会用Switch方法对比调用增删改查的方法,传入参数,不需要手动写实现类

6.输入参数,1.简单参数2.多个参数接口参数前加Param("id")或者在xml中写where id=#{arg0} 3.使用自定义对象和Map集合区别,多次出现建议封装对象

7,#和$区别,前者使用prepareStatement占位符方式赋值,后者字符串拼接,例如select * from student where ${colName} = #{cloValue}

8.返回值resultMap映射id:指定一个不重复的的值,type:查询结果用什么类型对象封装全限定名称,property:类中属性名,column:数据库字段名称;javaType和jdbcType可以不写,自动猜测,属性名和字段名一致可以不写,resultMap和resultType不能同时写

9,实体符号>&gt;<&lt;>=(&gl;=);<=(&lt;=);xml转为实体符号负责会出错

10,模糊查询Sql:where name like "%" #{name} "%"

11,动态Sql:1.if和where标签区别,if标签需要在Sql语句后面添加where 1=1;2.foreach标签主要对集合数据的遍历,collection="写数据类型,而不是属性名",open="(开始符号",close=“结束符号)",item="数据中的成员",separator="元素之间的分隔符,"

12,Sql片段,可以在mapper文件中将代码封装,使用<include>标签引用

13,properties文件在mybatis.xml的第一行配置,数据源属性直接用${driver},映射可以用resources或者package指定包名

14,分页助手,在pom文件加入pagehelper依赖,在xml中加入插件,类中PageHelper.stertPage(1,3)

15,mybatis缓存,一级缓存sqlsession级别,默认,二级sqlSessionFactory级别全局,不需要开启,使用在mapper映射文件加<cache/>标签,将查询的数据放入全局缓存,频繁修改数据库,不建议使用mybatis

16,连表查询1:多对一例如emp里有一个dept,多个员工对应一个部门,查询结果封装为resultMap,emp中的Dept属性用<association property="实体类的属性名" javaType="dept">标签,2:一对多dept中有emp用<collection property="属性名" ofType="emp">

17,mybatis中的注解,@test是junit测试只有在test目录下使用,@BeforeClass@AfterClass在所有测试方法执行前后执行,@Befor@Alfter在测试方法执行前后,@Select@Insert@Delete@Update直接在注解中写Sql语句,不需要mapper文件,在mybatis.xml中mapper标签使用class属性指定类,因为没有映射文件所以不用resources

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值