자바 Mybatis 주해 개발

7084 단어 자바Mybatis
1. 실체 클래스 만 들 기 User   인터페이스 UserDao
2. 주 프로필 만 들 기 설정 가 져 오기



    
    
    
    
        
    
    
    
        
            
            
                
                
                
                
            
        
    
    
    
        
    

3. 외부 프로필 만 들 기
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=123

 4. 테스트 클래스 절차  준 it 채용 유닛 테스트   
   before 자원 불 러 오기     
 1. 입력 흐름 주 설정 가 져 오기       2. 주 프로필 로 구축 공장.        3. 공장 으로 sqlSession 대상 구축        4. 사용 sqlSession 프 록 시 대상 가 져 오기
  After   실무, 일, 총무  자원 방출     1.SqlSession.commit()       2. SqlSession.close()                   3. in.close()
  @Before
    public void init() throws Exception {
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        factory = new SqlSessionFactoryBuilder().build(in);
        sqlSession = factory.openSession();    可以设置为true 自动提交
        userDao = sqlSession.getMapper(UserDao.class);
    }
    @After
    public void destroy() throws Exception {
        sqlSession.commit();
        sqlSession.close();
        in.close();
    }

 2. 사용 대리 대상 강화 방법 을 집행 하 다
UserDao   sql 문장 쓰기 기본 검색
  @Select("select * from user")
     List findAll();

     @Select("insert into user(username,birthday,sex,address)values(#{username},#{birthday},#{sex},#{address})")
     void save(User user);

     @Update("update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}")
     void updateUser(User user);

     @Delete("delete from user where id=#{id}")
     void deleteUser(int id);

     @Select("select * from user where id=#{id}")
     User findById(int id);

//     @Select("select * from user where username like #{username}")
     @Select("select * from user where username like '%${value}%' ")   //value 是固定的
     List findByName( String username);

     @Select("select count(id) from user")
     int findCount();

   그 중 모호 조회 @ Select ("select * from username like\# {username}")  테스트 클래스 user. setUsername ("% wyc%") 도 써 야 합 니 다. 
       @Select("select * from user where username like '%${value}%' ")   value 는 고정 적 입 니 다. %% 안 써 도 돼 요.
다 중 테이블 조작
  주해 해결 속성 은 데이터베이스 와 대응 하지 않 습 니 다.
     실체 클래스 중 예.   Integer userId;      String userName;      Date userBirthday;        String userSex;        String userAddress;
   데이터베이스    id   username  birthday  sex address  필드 시간    이름 이 실체 클래스 와 일치 하지 않 습 니 다. 패키지 할 때 username 만 봉인 할 수 있 습 니 다.
    @Select("select * from user")
    @Results(id = "userMap",value = {
            @Result(id=true,column = "id",property = "userId"),
            @Result(column = "username",property = "userName"),
            @Result(column = "sex",property = "userSex"),
            @Result(column = "address",property = "userAddress"),
            @Result(column = "birthday",property = "userBirthday")
    })
    List findAll();

  id=true  나타내다 이 속성 은 데이터베이스 에 있 습 니 다.  메 인 키     그 속 id = "userMap"   마땅 하 다 그룹의 유일한 표지 입 니 다. 다른 검색 어 에서 도 이 이름 을 사용 할 수 있 습 니 다.
    @Select("select * from user where id=#{id}")
    @ResultMap("userMap")   标准写法 value={"userMap"}
    User findById(int id);

일대일 조회 

    public class Account implements Serializable {
    private Integer id ;
    private Integer uid ;
    private Integer money;
    定义账户与用户一对一的映射关系
    private User user;}
    查询所有账户,并且包括用户的信息
    @Select("select * from account a left outer join user u on u.id=a.uid")
    @Results(id = "accountMap",value = {
        @Result(id = true,column = "id",property = "id"),
        @Result(column = "uid",property = "uid"),
        @Result(column = "money",property = "money"),
        @Result(column = "uid",property = "user",one = @One(select="com.wyc.Dao.UserDao.findById",
                fetchType= FetchType.EAGER)),
})
    List findAll();

 @Result( column = "uid",property = "user",  one = @One(select="com.wyc.Dao.UserDao.findById",
     fetchType= FetchType.EAGER)),           select 지정 UserDao 사용자 검색 방법         fetch Type 지정 게 으 름 로드
    根据id 查询用户
    @Select("select * from user where id=#{id}")
    @ResultMap("userMap")
    User findById(int id);

 
다 중 검색
    public class User implements Serializable {
    private Integer userId;
    private String userName;
    private Date userBirthday;
    private String userSex;
    private String userAddress;
    private List accounts;     一对多 关系映射
    @Select("select * from user")    查询所有用户,并且包含所有该用户的账户信息
    @Results(id = "userMap",value = {
            @Result(id=true,column = "id",property = "userId"),
            @Result(column = "username",property = "userName"),
            @Result(column = "sex",property = "userSex"),
            @Result(column = "address",property = "userAddress"),
            @Result(column = "birthday",property = "userBirthday"),
            @Result(column = "id",property = "accounts",many = @Many(
                select = "com.wyc.Dao.AccountDao.findById",
                fetchType = FetchType.EAGER))
    })
    List findAll();

 select 지정 계 정 인터페이스 이루어지다 쓰다 사용자 id 모든 계 정의 방법    
    根据用户id 查询账户
    @Select("select * from account where uid = #{uid}")
    List findById(int id);

총결산 통상 적 인 상황   한 쌍 의 다 중 사용 지연 로드   일대일 사용 즉시 불 러 오기
주석 2 단계 캐 시
  1 레벨 캐 시 기본 오픈    캐 시  기본 설정  ,더 필요 하 다 USerdao 인터페이스 에서  주석 을 달다 
@CacheNamespace(blocking = true)
public interface UserDao {}

sqlSession = factory.openSession();    닫다 1 레벨 캐 시 를 열 어 사라 짐      단 한 번 만 조회 할 수 있 습 니 다.  2 급 캐 시 를 사 용 했 습 니 다.

좋은 웹페이지 즐겨찾기