框架明白--
mybatis基本概念
搭建mybatis环境 1, 导入需要的jar包 2, 配置mybatis的总配置文件: mybatis-config.xml 配置根标签 <!-- 根标签 --> <configuration> <!-- 引入属性文件 属性文件通常写数据库连接的信息 username(注意一个问题, 属性文件中不要单独写一个username) password url driverClass --> <property resource="属性文件所在src下的位置" /> <!-- 或者直接定义属性值 --> <properties> <property name="jdbc.username" value="test" /> <property name="jdbc.password" value="test" /> <property name="jdbc.driverClassName" value="oracle.jdbc.OracleDriver" /> <property name="jdbc.url" value="jdbc:oracle:thin:@localhost:1521:orcl" /> </properties> <!-- 为实体类定义一个别名, 如果不定义别名, 在映射文件中就要写这个实体类的全路径名 --> <typeAliases> <!-- 这个写法取的别名是随意的, 可以自己任意定义 --> <!-- <typeAlias type="类名的全路径名" alias="别名"></typeAlias> --> <!-- 如果使用下面这个写法, 就是按照mybatis自己定义的规则, 这个包下的所有类的类名就是别名 --> <package name="com.model"/> <!-- 使用package标签实际是默认扫描model包下的所有的类, 如果在实体类的定义了注解@Alias(value = "..."), 则优先使用注解 --> </typeAliases> <!-- 配置mybatis的运行环境们 --> <environments default="所使用的环境的标签id"> <environment id="default"> <!-- 配置事务管理器的类型 JDBC MANAGED--(托管, 商业服务器上才有的功能, Tomcat没有) --> <transactionManager type="JDBC" /> <!-- POOLED(基于连接池的数据源) UNPOOLED(使用普通的数据库连接) JNDI(使用应用服务器上的JNDI连接配置数据源, 很少使用) --> <dataSource type="POOLED"> <property name="username" value="${属性文件中配置的信息}"></property> <property name="password" value="${属性文件中配置的信息}"></property> <property name="url" value="${属性文件中配置的信息}"></property> <property name="driver" value="${属性文件中配置的信息}"></property> </dataSource> </envirment> </environments> <mappers> <!-- 挨个写明每个映射文件所在的位置 --> <mapper resource="src下mapper映射文件的全路径名"> <!-- 写明每个映射文件所对应的接口的限定名, package引入的文件一定是接口, 所以如果使用这种方式, 必须是使用接口对应映射文件的方式 --> <package name="接口所在的包" /> </mappers> </configuration> 3, 新建每个实体类的映射文件...Mapper.xml <!-- 定义每个实体类的映射文件 --> <mapper namespace="唯一的id / 接口的全路径名"> <select id="被调用的id(唯一) / 需要执行的方法名"></select> <insert></insert> <update></update> <delete></delete> </mapper> 4, 写测试类运行mybatis MybatisUtil 两步: 1, 构建SqlSessionFactory InputStream in = Resources.getResourceAsStream("总配置文件所在的src下的路径"); SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(in); 2, 构建SqlSession(注意SqlSession不能以一个class成员变量的身份被返回) SqlSession ss = ssf.openSession(); 3, 直接运行 a: 直接运行映射文件中的sql语句 ss.select... ss.insert... ss.update... ss.delete... b: 使用接口映射配置文件 ss.getMapper(接口类名.class); 调用接口的方法 一对一, 一对多查询 1, 一对一 映射文件中写明resultMap, 这时sql语句一定用关联查询多个表的内容 <resultMap type="类名" id="..."> <id property="实体类中成员变量的名字" column="查询结果中的列名" /> <result property="成员变量的名字" column="查询结果中的列名" /> ... <!-- 对象级联 --> <result property="major.majorid" column="查询结果中的列名" /> <result property="major.mname" column="查询结果中的列名" /> </resultMap> <resultMap type="类名" id="..."> <id property="实体类中成员变量的名字" column="查询结果中的列名" /> <result property="成员变量的名字" column="查询结果中的列名" /> ... <!-- 对象级联 --> <association property="major" resultMap="定义好的另一个resultMap" /> </resultMap> <resultMap type="类名" id="..."> <association property="属性名" select="其他映射文件中的查询语句" /> </resultMap> 2, 一对多 <resultMap type="类名" id="..."> <collection property="students" select="其他映射文件中的查询语句" /> </resultMap> 动态sql语句 1, <if>条件 <if test="key!=null"> 拼接sql语句 </if> 2, <choose><when><otherwise> <choose> <when test="key=='value'"> 拼接sql语句 </when> <when test="key=='value'"> 拼接sql语句 </when> <otherwise> 拼接sql语句 </otherwise> </choose> 3, <where> 自动添加where关键字 如果where子句第一句中有 or 或者 and 则删除第一个 4, <trim> 功能与<where>类似, 并且提供了前缀, 后缀的添加, 更加灵活 5, <foreach> 用来遍历传入的集合参数 item(定义集合中每个对象的名字), collection(集合的对象的名字), list(array) 集合(数组) open(定义开始的字符), close(定义结束的字符), separator(定义分割的字符) 6, <set> 主要用于update 自动加上set关键字 自动剔除最后一个 "," 7, <sql> 经常用于一些常用或者固定的语句, 在外面定义一个语句, 在各种标签中引入 使用include, 相当于直接写在上面 8, <selectKey> 用于不支持自增长主键的数据库, 尽量避免写这个东西. 从表中的id想和主表的id相同,可以用这个 < < 小于号 > > 大于号 & & 和 ' ’ 单引号 " " 双引号 <![CDATA[]]> 分页, 文件的存储 逻辑分页mybatis中,内存中分页 物理分页oracle中,看第几页显示第几页内容.这个数量大就要用这个 缓存
mybatis环境搭建