- 回顾 mybatis
- 核心配置文件 conf.xml
- 放在src/resources下
- settings
- log4j
- 别名
- 数据库连接池
- 加载映射文件
- 映射文件
- mapper namespace=""
- id、parameterType、@Param
- insert
- selectKey
- update
- delete
- select resultType="vo,map"
- sql
- resultMap
- <resultMap type="emp" id="myEmp" >
<id column="id" property="id"/>
<result column="name" property="name"/>
<association property="dept" javaType="dept">
<id column="deptid" property="id"/>
<result column="dname" property="name"/>
</association>
</resultMap>
- <resultMap type="emp" id="myEmp" >
- 重点是 resultMap 的多对一(多个员工对应一个部门)
- 核心配置文件 conf.xml
- 继续 resultMap 的一对多(一个部门对应多个员工)
- BookMapper.xml
- BookDao.java 里增加 public List<Dept> getDepts();
- TestBook.java
- 控制台结果
- BookMapper.xml
- 权限四表的设计
- 权限几乎是每个系统都要实现的模块(功能)
- 权限功能一般需要设计一下几个表
- 用户表:id,用户名,密码
- 角色表:管理员,普通用户,操作员
- 权限表:最小的一个功能
- 操作
- 插入一个员工(可以选择角色)【代码附在最后】
- 查询一个员工的所有权限
- 动态sql
- mybatis最强大的功能之一;
- 当sql语句需要根据用户的不同请求动态生成时,就可以使用动态sql功能;
- 通过一系列的标记来实现
- 标记:if,choose when,where,set,trim,foreach
- if 语法
- <if test="条件"></if>
- where 语法
- <where>动态sql</>
- 作用:根据where标记中的内容是否存在来决定是否生成where,并会自动去掉where中第一个 and 或or
- 例子
- <select id="selectEmp" parameterType="emp" resultType="emp">
select * from tb_emp
<where>
<if test="empName!=null">
empName=#{empName}
</if>
<if test="tel!=null">
and tel=#{tel}
</if>
</where>
</select>
- <select id="selectEmp" parameterType="emp" resultType="emp">
- 繁琐的代码地带
- 项目工程截图
- 以下为每一个文件里的代码(包括dao,service,util,vo,EmpMapper,conf,log4j,Test,pom)
-
package com.oracle.dao; import com.oracle.vo.Emp; public interface EmpDao { public void save(Emp emp); } ------------------------------------------------------------------------------------------- package com.oracle.service; import com.oracle.vo.Emp; public interface EmpService { public void save(Emp emp); } ------------------------------------------------------------------------------------------- package com.oracle.service; import org.apache.ibatis.session.SqlSession; import com.oracle.dao.EmpDao; import com.oracle.util.SessionUtils; import com.oracle.vo.Emp; import com.oracle.service.EmpService; public class EmpServiceImpl implements EmpService { @Override public void save(Emp emp) { // 控制事务 SqlSession session = SessionUtils.openSession(); try { EmpDao dao = session.getMapper(EmpDao.class); dao.save(emp); session.commit(); } catch(Exception e) { session.rollback(); } finally { session.close(); } } } ------------------------------------------------------------------------------------------- package com.oracle.util; import java.io.IOException; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class SessionUtils { private static SqlSessionFactory factory = null; static { try { factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("conf.xml")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static SqlSession openSession() { return factory.openSession(); } } ------------------------------------------------------------------------------------------- package com.oracle.vo; public class Emp { int empid; String empno; String password; String empName; String tel; Role role; public int getEmpid() { return empid; } public void setEmpid(int empid) { this.empid = empid; } public String getEmpno() { return empno; } public void setEmpno(String empno) { this.empno = empno; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getEmpName() { return empName; } public void setEmpName(String empName) { this.empName = empName; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } public Role getRole() { return role; } public void setRole(Role role) { this.role = role; } @Override public String toString() { return "Emp [empid=" + empid + ", empno=" + empno + ", password=" + password + ", empName=" + empName + ", tel=" + tel + ", role=" + role + "]"; } } ------------------------------------------------------------------------------------------- package com.oracle.vo; public class Right { String rightId; String rightName; String rightURL; public String getRightId() { return rightId; } public void setRightId(String rightId) { this.rightId = rightId; } public String getRightName() { return rightName; } public void setRightName(String rightName) { this.rightName = rightName; } public String getRightURL() { return rightURL; } public void setRightURL(String rightURL) { this.rightURL = rightURL; } @Override public String toString() { return "Right [rightId=" + rightId + ", rightName=" + rightName + ", rightURL=" + rightURL + "]"; } } ------------------------------------------------------------------------------------------- package com.oracle.vo; import java.util.List; public class Role { int roleid; String roleName; String roleDesc; List<Right> rights; public Role() { super(); } public Role(int roleid) { super(); this.roleid = roleid; } public int getRoleid() { return roleid; } public void setRoleid(int roleid) { this.roleid = roleid; } public String getRoleName() { return roleName; } public void setRoleName(String roleName) { this.roleName = roleName; } public String getRoleDesc() { return roleDesc; } public void setRoleDesc(String roleDesc) { this.roleDesc = roleDesc; } public List<Right> getRights() { return rights; } public void setRights(List<Right> rights) { this.rights = rights; } @Override public String toString() { return "Role [roleid=" + roleid + ", roleName=" + roleName + ", roleDesc=" + roleDesc + ", rights=" + rights + "]"; } } ------------------------------------------------------------------------------------------- <?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.oracle.dao.EmpDao"> <insert id="save" parameterType="emp"> insert into tb_emp values(null,#{role.roleid},#{empno},#{password},#{empName},#{tel}) </insert> </mapper> ------------------------------------------------------------------------------------------- <?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> <settings> <setting name="logImpl" value="LOG4J"/> </settings> <typeAliases> <package name="com.oracle.vo"/> </typeAliases> <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/project" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> <mappers> <mapper resource="com/oracle/dao/EmpMapper.xml" /> </mappers> </configuration> ------------------------------------------------------------------------------------------- log4j.rootLogger=DEBUG, CONSOLE, FILE ## for console log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d{MM-dd-HH:mm:ss}[%c-%L][%t][%-4r] - %m%n ## for file log4j.appender.FILE=org.apache.log4j.RollingFileAppender log4j.appender.FILE.File=D:/logs/log4j.log log4j.appender.FILE.MaxFileSize=5MB log4j.appender.FILE.Append = true log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [%t] %-5p %c(line-%L) %-4r %x - %m%n ------------------------------------------------------------------------------------------- package mybatisTest; import java.io.IOException; import org.apache.ibatis.session.SqlSession; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.oracle.dao.EmpDao; import com.oracle.service.EmpService; import com.oracle.service.EmpServiceImpl; import com.oracle.util.SessionUtils; import com.oracle.vo.Emp; import com.oracle.vo.Role; public class TestBook { @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Test public void test() throws IOException { Emp emp = new Emp(); emp.setEmpName("李逵"); emp.setEmpno("111"); emp.setPassword("hello world"); emp.setTel("111111"); emp.setRole(new Role(1)); EmpService service = new EmpServiceImpl(); service.save(emp); } } ------------------------------------------------------------------------------------------- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.oracle</groupId> <artifactId>mybatisTest</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.36</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!-- https://mvnrepository.com/artifact/log4j/log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies> </project>
-
- 项目工程截图