jar包依赖
pom.xml
<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.47</version>
</dependency>
<dependency>
在main目录下新加resources文件夹 新建并配置mybatis.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>
<!--取个别名 直接写类名就可以了 在 insert中 列如user-->
<typeAliases>
<package name="com.dz.pojo"/>
</typeAliases>
<environments default="test">
<environment id="test">
<!--配置事务管理器-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据库连接池 连接数据源-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mydb"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--配置连接的写sql语句的xml -->
<mappers>
<mapper resource="com/dz/dao/UserMapper.xml"></mapper>
</mappers>
</configuration>
在UserMapper 中写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">
<!--namespace的值一定要和userdao这个接口的完全限定名一致 这是约定-->
<mapper namespace="com.dz.dao.UserDao">
<!--存入数据并返回id keyColumn 是指返回的列在数据库中的, keyProperty 指在实体类中的 两个要指的同一个属性-->
<!--当存入或更新数据需要返回其他数据的时候useGeneratedKeys="true"要加上 否则返回值为空例如id如果不加返回值为0-->
<insert id="save" parameterType="User" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
insert into t_user (username,password) values(
</insert>
<!--<update id="update" parameterType="int,String">
update t_user set username=
</update>-->
<!--根据id删除数据-->
<delete id="del" parameterType="int">
delete from t_user where id=
</delete>
<!--用键值对的形式存储数据-->
<insert id="saveMap" parameterType="java.util.Map" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
insert into t_user (username,password) values(
</insert>
<!--查找所有 虽然返回的是User的List集合但是resultType还是写user 类在这里不分大小写-->
<select id="findAll" resultType="user" >
SELECT id,username,password from t_user
</select>
<!--根据id查找对象-->
<select id="findById" parameterType="int" resultType="User">
select id,username,password from t_user where id =
</select>
<!--映射关系一对一-->
<resultMap id="userInfo" type="User">
<id property="id" column="uid"/>
<result column="username" property="username"/>
<association property="card" javaType="Card">
<id property="id" column="cid"/>
<result property="cardno" column="cardno"/>
</association>
</resultMap>
<select id="userInfo" resultMap="userInfo">
SELECT u.`id` uid,u.`username`,c.`id` cid ,c.`cardno` FROM t_user u
JOIN card c
ON u.`id`=c.`id`
</select>
<select id="userInfobyid" parameterType="int" resultMap="userInfo">
SELECT u.`id` uid,u.`username`,c.`id` cid ,c.`cardno` FROM t_user u
JOIN card c
ON u.`id`=c.`id`
WHERE u.`id`=
</select>
<resultMap id="userAndAddress" type="User">
<id property="id" column="uid"/>
<result column="username" property="username"/>
<collection property="addresses" ofType="Address">
<id property="id" column="aid"/>
<result column="address" property="address"/>
</collection>
</resultMap>
<select id="findUserAndAddress" resultMap="userAndAddress">
SELECT u.`id` uid,ad.`id` aid,u.`username`,ad.`address` FROM t_user u
JOIN address ad
ON u.`id` = ad.`userid`
</select>
<!--多对多-->
<resultMap id="studentInfo" type="Student">
<id property="id" column="sid"/>
<result column="sname" property="name"/>
<collection property="teacherList" ofType="Teacher">
<id property="id" column="tid"/>
<result column="tname" property="name"/>
</collection>
</resultMap>
<select id = "findStudentInfo" resultMap="studentInfo">
SELECT s.id sid,s.name sname,t.id tid,t.name tname
FROM t_stud s
JOIN t_tea_stu ts
ON s.id=ts.`sid`
JOIN t_tea t
ON t.id=ts.`tid`
</select>
</mapper>
userdao接口
package com.dz.dao;
import com.dz.pojo.User;
import java.util.List;
import java.util.Map;
public interface UserDao {
void save(User user);
void del(int id);
void saveMap(Map<String,Object> map);
List<User> findAll();
User findById(int id);
List<User> userInfo();
User userInfobyid(int id);
List<User> findUserAndAddress();
}
执行
package com.dz.dao;
import com.dz.pojo.Address;
import com.dz.pojo.User;
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.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class UserDaoTest {
@Test
public void test(){
try {
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userAndAddress = userDao.findUserAndAddress();
for (User u : userAndAddress) {
System.out.println(u.getUsername());
List<Address> addressList = u.getAddresses();
for (Address a : addressList) {
System.out.println(a.getAddress());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}